|
|
 |
 |
|
|
 |
|
MySQL数据库技术(14)
|
|
|
|
编辑:华夏媒体 作者:未知 来源:网络 时间:2006-07-29 总浏览量:940 |
|
文字大小:[ 大 中 小 ]
文字颜色: 双击滚屏/单击停止 |
|
[上一页] [1] [2] [3] [4] [5] [下一页]
|
IF EXISTS 在mysql 所用的脚本中很有用,因为缺省情况下, mysql 将在出错时退出。例如,有一个安装脚本能够创建表,这些表将在其他脚本中继续使用。在此情形下,希望保证此创建表的脚本在开始运行时无后顾之忧。如果在该脚本开始处使用普通的DROP TABLE,那么它在第一次运行时将会失败,因为这些表从未创建过。如果使用IF EXISTS,就不会产生问题了。当表已经存在时,将它们删除;如果不存在,脚本继续运行。 3.4.3 创建和删除索引 索引是加速表内容访问的主要手段,特别对涉及多个表的连接的查询更是如此。这是第4章“查询优化”中的一个重要内容,第4章讨论了为什么需要索引,索引如何工作以及怎样利用它们来优化查询。本节中,我们将介绍索引的特点,以及创建和删除索引的语法。 1. 索引的特点 MySQL 对构造索引提供了很大的灵活性。可对单列或多列的组合进行索引。如果希望能够从一个表的不同列中找出一个值,还可以在一个表上构造不止一个索引。如果某列为串类型而非ENUM 或SET 类型,可以选择只对该列最左边的n 个字符进行索引。如果该列的前n个字符最具有唯一性,这样做一般不会牺牲性能,而且还会对性能有大的改善:用索引列的前缀而非整个列可使索引更小且访问更快。虽然随着MySQL 的进一步开发创建索引的约束将会越来越少,但现在还是存在一些约束的。下面的表根据索引的特性,给出了ISAM 表和MyISAM 表之间的差别:
 从此表中可以看到,对于ISAM 表来说,其索引列必须定义为NOT NULL,并且不能对BLOB 和TEXT 列进行索引。MyISAM 表类型去掉了这些限制,而且减缓了其他的一些限制。两种表类型的索引特性的差异表明,根据所使用的MySQL 版本的不同,有可能对某些列不能进行索引。例如,如果使用3.23 版以前的版本,则不能对包含NULL 值的列进行索引。 如果使用的是MySQL 3.23版或更新的版本,但表是过去以ISAM 表创建的,可利用ALTER TABLE 很方便地将它们转换为MyISAM 存储格式,这样使您能利用某些较新的索引功能,如: ALTER TABLE tb1_name TYPE=MYISAM 2. 创建索引 在执行C R E ATE TABLE 语句时,可为新表创建索引,也可以用CREATE INDEX 或ALTER TABLE 来为一个已有的表增加索引。C R E ATE INDEX 是在MySQL 3.23版中引入的,但如果使用3.23 版以前的版本,可利用A LTER TABLE 语句创建索引(MySQL 通常在内部将CRE ATE INDEX 映射到A LTER TA B L E)。可以规定索引能否包含重复的值。如果不包含,则索引应该创建为P R I M A RY KEY 或UNIQUE 索引。对于单列惟一索引,这保证了列不包含重复的值。对于多列惟一索引,它保证值的组合不重复。 PRIMARY KEY 索引和UNIQUE 索引非常类似。事实上, PRIMARY KEY 索引仅是一个具有名称PRIMARY 的UNIQUE 索引。这表示一个表只能包含一个PRIMARY KEY,因为一个表中不可能具有两个同名的索引。同一个表中可有多个UNIQUE 索引,虽然这样做意义不 大。 为了给现有的表增加一个索引,可使用ALTER TABLE 或CREATE INDEX 语句。ALTER TABLE 最常用,因为可用它来创建普通索引、UNIQUE 索引或PRIMARY KEY 索引,如:
 其中tbl_name 是要增加索引的表名,而column_list 指出对哪些列进行索引。如果索引由不止一列组成,各列名之间用逗号分隔。索引名index_name 是可选的,因此可以不写它,MySQL 将根据第一个索引列赋给它一个名称。ALTER TABLE 允许在单个语句中指定多个表的更改,因此可以在同时创建多个索引。 CREATE INDEX 可对表增加普通索引或UNIQUE 索引,如:
 tbl _ name、index_name 和column_list 具有与A LTER TABLE 语句中相同的含义。这里索引名不可选。不能用CREATE INDEX 语句创建PRIMARY KEY 索引。要想在发布CREATE TABLE 语句时为新表创建索引,所使用的语法类似于ALTER TABLE 语句的语法,但是应该在您定义表列的语句部分指定索引创建子句,如下所示:
 与ALTER TABLE 一样,索引名对于INDEX 和UNIQUE 都是可选的,如果未给出,MySQL 将为其选一个。有一种特殊情形:可在列定义之后增加PRIMARY KEY 创建一个单列的PRIMARY KEY索引,如下所示:
 前面所有表创建样例都对索引列指定了NOT NULL。如果是ISAM 表,这是必须的,因为不能对可能包含NULL 值的列进行索引。如果是MyISAM 表,索引列可以为N U L L,只要该索引不是P R I M A RY KEY 索引即可。 如果对某个串列的前缀进行索引(列值的最左边n 个字符),应用column_list 说明符表示该列的语法为col_name(n) 而不用c o l _ name。例如,下面第一条语句创建了一个具有两个CHAR 列的表和一个由这两列组成的索引。第二条语句类似,但只对每个列的前缀进行索引:
|
|
[上一页] [1] [2] [3] [4] [5] [下一页]
|
|
|
打印 收藏 关闭 至顶部 |
|
 |
|