MySQL 4.1.0 中文参考手册 --- 6.5 数据定义: CREATE、DROP、ALTER[7]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 shuixin13 的 blog

  • alter column 可以为一列指定一个新的缺省值或删除老的缺省值。如果老的缺省值被移除且列可以被设为 null,新的缺省值将是 null。如果该列不允许有 null值,mysql 以章节 6.5.3 create table 句法 中的描述方式为该列赋于一个缺省值。

  • drop index 移除一个索引。这是 mysql 对 ansi sql92 的一个扩展。查看章节 6.5.8 drop index 句法

  • 如果列被从一个表中移除,列也将从任何有它为组成部分的索引中被移除。如果组成一个索引的所有列均被移除了,那么,该索引也将被移除。

  • 如果一个表只包含一个列,那么该列不能被移除。如果你本就打算移除该表,请使用 drop table 代替。

  • drop primary key 移除主索引。如果这样的索引不存在,它将移除表中的第一个 unique 索引。(如果没有 primary key 被明确指定,mysql 将第一个 unique 键标记为 primary key ) 如果你添加一个 unique indexprimary key 到一个表中,它将被存储在任何非 unique 索引之前,因而,mysql 可以尽可能地检测出重复键。

  • order by 允许你以指定的记录行顺序创建一个新表。注意,在插入与删除后,该表将不会保留这个顺序。在某些情况下,如果表在你以后希望排序的列上是有序的,这将使得 mysql 排序时更加得容易。当你知道你主要查询的行以一个确定的次序时,这将是很有用的。在对表进行过大的改变后,通过使用这个选项,你可能会得到更高的性能。

  • 如果你在一个 myisam 表上使用 alter table ,所有非唯一的索引将以一个分批方式创建(就像 repair 一样)。当你有很多索引时,这可能使 alter table 更快一点。

  • mysql 4.0 开始,上面的特性可明确地激活。alter table ... disable keys 使 mysql 停止更新 myisam 表的非唯一索引。然后 alter table ... enable keys 可以被用来重建丢失的索引。因为 mysql 以特殊的算法执行它,这将比一个接一个地插入索引要快得多,禁用键可以很大程序上的加速一个大批量的插入。

  • 使用 c api 函数 mysql_info(),你可以找出有多少记录被拷贝,以及(当 ignore 被使用时)有多少记录因唯一键值重复而被删除。

  • foreign keycheckreferences 子句实际上不做任何事情,除了对于 innodb 类型的表,它支持 add constraint foreign key (...) references ... (...)。 注意,innodb 不允许一个 index_name 被指定。查看章节 7.5 innodb。 对于其它类型的表,这个句法仅仅为了兼容而提供,以更容易地从其它 sql 服务器移植代码和更容易地运行以引用创建表的应用程序。查看章节 1.8.4 mysql 与 ansi sql92 相比不同的差别

    这里是一个例子,显示了 alter table 的一些用法。我们以一个按如下方式创建一个表 t1 开始:

    mysql> create table t1 (a integer,b char(10));
    

    为了将表 t1 重命名为 t2

    mysql> alter table t1 rename t2;
    

    为了将列 ainteger 改变为 tinyint not null(列名不变),并将列 bchar(10) 改变为 char(20) ,同时也将 b 重命名为 c

    mysql> alter table t2 modify a tinyint not null, change b c char(20);
    

    添加一个名为 dtimestamp c列:

    mysql> alter table t2 add d timestamp;
    

    在列 d 上增加一个索引,将列 a 设为主键:

    mysql> alter table t2 add index (d), add primary key (a);
    

    移除列 c:

    mysql> alter table t2 drop column c;
    

    添加一个名为 cauto_increment 整型列:

    mysql> alter table t2 add c int unsigned not null auto_increment,
               add index (c);
    

    注意,我们索引了 c,因为 auto_increment 列必须被索引,同样我们声明列 cnot null,因为被索引的列不能有 null

    当你添加一个 auto_increment 列时,列值会自动地以序列值填充。通过在 alter table 或使用 auto_increment = # 表选项之前执行 set insert_id=# ,你可以设置第一个序列数字。查看章节 5.5.6 set 句法

    对于 myisam 表,如果你不改变 auto_increment 列,序列值将不会被影响。如果你移除一个auto_increment 列,并添加另一个 auto_increment 列,值将再次从 1 开始。

    查看章节 a.6.1 alter table 的问题

    6.5.5 rename table 句法

    rename table tbl_name to new_tbl_name[, tbl_name2 to new_tbl_name2,...]
    

    更名是以原子方式(atomically)执行,这就意味着,当更名正在运行时,其它的任何线程均不能该表。这使得以一个空表替换一个表成为可能。

    create table new_table (...);
    rename table old_table to backup_table, new_table to old_table;
    

    改名是从左到右执行的,这就意味着,如果你希望交换两个表名,你不得不这样做:

  • 本文关键:MySQL 4.1.0 中文
     

    本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

    go top