■ ISAM 表。ISAM 存储格式是MySQL3.23 所用的最旧的格式,但当前仍然可用。通常,相对于ISAM 表来说,宁可使用MyISAM 表,因为它们的限制较少。对ISAM 表的支持随着此存储格式被MyISAM 表格式所支持很有可能会逐渐消失。
■ HEAP 表。HEAP 存储格式建立利用定长行的内存中的表,这使表运行得非常快。在服务器停止时,它们将会消失。在这种意义上,这些表是临时的。但是,与用CREATE TEMPORARY TABLE 所创建的临时表相比,HEAP 表是其他客户机可见的。HEAP 表有几个限制,这些限制对MyISAM 或ISAM 表没有,如下所示:
■ 索引仅用于“=”和“< = >”比较。
■ 索引列中不能有NULL 值。
■ 不能使用BLOB 和TEXT 列。
■ 不能使用AUTO_INCREMENT 列。
2. 创建不存在的表
要创建一个不存在的表,使用CREATE TABLE IF NOT EXISTS 即可。在某种应用程序中,无法确定要用的表是否已经存在,因此,要创建这种表。IF NOT EXISTS 修饰符对于作为用mysql运行的批量作业的脚本极为有用。在这里,普通的CREATE TABLE 语句工作得
不是很好。因为作业第一次运行时,建立这些表,如果这些表已经存在,则第二次运行时将出错。如果用IF NOT EXISTS语句,就不会有问题。每一次运行作业时,像前面一样创建表。如果这些表已经存在,在第二次运行时,创建表失败,但不出错。这使得作业可以继续运行,就像创建表的企图已经成功了一样。
3. 临时表
可用CREATE TEMPORARY TABLE 来创建临时表,这些表在会话结束时会自动消失。使用临时表很方便,因为不必费心发布DROP TABLE 语句明确地删除这些表,而且如果您的会话不正常结束,这些表不会滞留。例如,如果某个文件中有一个用mysql运行的查询,您决定不等到其结束,那么可以在其执行的中途停止这个查询,而且毫无问题,服务器将删除所创建的任意临时表。在旧版的MySQL中,没有真正的临时表,除了您在自己的头脑中认为它们是临时的除外。对于需要这样的表的应用程序,必须自己记住删除这些表。如果忘了删除,或在前面使其存在的客户机中出现错误时,这些表在有人注意到并删除它们以前会一直存在。临时表仅对创建该表的客户机可见。其名称可与一个现有的永久表相同。这不是错误,也不会使已有的永久表出问题。假如在samp_db 数据库中创建了一个名为member 的临时表。原来的member 表变成隐藏的(不可访问),对member 的引用将引用临时表。如果发布一条DROP TABLE member 语句,这个临时表将被删除,而原来的member 表“重新出现”。如果您简单地中断与服务器的连接而没有删除临时表,服务器会自动地删除它。下一次连接时,
原来的member 表再次可见。名称隐藏机制仅在一个级别上起作用。即,不能创建两个具有同一个名称的临时表。
4. 利用SELECT 的结果创建表
关系数据库的一个重要概念是,任何数据都表示为行和列组成的表,而每条SELECT 语句的结果也都是一个行和列组成的表。在许多情况下,来自SELECT 的“表”仅是一个随着您的工作在显示屏上滚动的行和列的图像。在MySQL3.23 以前,如果想将SELECT 的结果保存在一个表中以便以后的查询使用,必须进行特殊的安排:
1) 运行DESCRIBE 或SHOW COLUMNS 查询以确定想从中获取信息的表中的列类型。
2) 创建一个表,明确地指定刚才查看到的列的名称和类型。
3) 在创建了该表后,发布一条INSERT ... SELECT 查询,检索出结果并将它们插入所创建的表中。
在MySQL3.23 中,全都作了改动。CREATE TABLE ... SELECT 语句消除了这些浪费时间的东西,使得能利用SELECT 查询的结果直接得出一个新表。只需一步就可以完成任务,不必知道或指定所检索的列的数据类型。这使得很容易创建一个完全用所喜欢的数据填充的表,并且为进一步查询作了准备。可以通过选择一个表的全部内容(无WHERE 子句)来拷贝一个表,或利用一个总是失
败的WHERE 子句来创建一个空表,如:
上一页 [1] [2] [3] [4] [5] [6] [7] 下一页
Tag:数据库教程,sql数据库教程,access数据库教程,电脑教学 - 数据库教程