Mysql入门系列:MySQL的列类型(1)
2006-12-31 10:48:03 来源:WEB开发网■ REPLACE 语句正常起作用。
■ UPDATE语句按类似插入新记录的规则起作用。如果更新一个AUTO _ I N C R E M E N T列为NULL 或0,则会自动将其更新为下一个序列号。如果试图更新该列为一个已经存在的值,将出错(除非碰巧设置此列的值为它所具有的值,才不会出错,但这没有任何意义)。如果更新该列的值为一个比当前任何列值都大的值,则以后序列将从下一个值继续进行编号。
■ 最近自动产生的序列编号值可调用L A S T _ INSERT_ID( ) 函数得到。它使得能在其他不知道此值的语句中引用AUTO_INCREMENT 值。L A S T _ INSERT_ID( ) 依赖于当前服务器会话中生成的AUTO_INCREMENT 值; 它不受与其他客户机相关的AUTO_INCREMENT 活动的影响。如果当前会话中没有生成AUTO_INCREMENT 值,则L A S T _ INSERT_ID( ) 返回0。能够自动生成顺序编号这个功能特别有用。但是刚才介绍的AUTO_INCREMENT 性能有两个缺陷。首先,序列中顶上的记录被删除时,序列值的重用使得难于生成可能删除和插入记录的应用的一系列单调(严格递增)值。其次,利用从大于1的值开始生成序列的方法是很笨的。
(2) MySQL3.23 版以后的AUTO_INCREMENTMySQL3.23 对AUTO_INCREMENT 的性能进行了下列变动以便能够处理上述问题:
■ 自动顺序生成的值严格递增且不重用。如果最大的值为143 并删除了包含这个值的记录,MySQL继续生成下一个值14 4。
■ 在创建表时,可以明确指定初始的序列编号。下面的例子创建一个AUTO _ I N C R E -MENT 列seq 从1,000,000 开始的表:
在一个表具有多个列时(正如多数表那样),最后的AUTO_INCREMENT = 1000000子句应用到哪一列是不会混淆的,因为每个表只能有一个AUTO_INCREMENT 列。
更多精彩
赞助商链接