试用 MySQL 的 AUTO_INCREMENT 功能

投稿者: | 2014年10月2日

向表单追加新的数据记录时,往往涉及到记录ID的生成问题。过去,一般采用访问数据库里的表单,通过 SELECT 的 SQL 检索文来找出最大的 ID 值,加 1 后生成新的 ID, 然后写入到表单里。这样的操作可能遇到的问题就是,当有复数的用户需要同时写入同一表单时,可能在生成新 ID 时出现冲突。

为此,一些编程人员采用了另做一个 ID 管理表的方法。就是在生成新的 ID 时,把新 ID 首先写入到一个专门管理 ID 用的表单里,然后再进行目的表单的写入操作。这在无形中增加了系统的负担。

1. AUTO_INCREMENT 的基本功能

其实,MySQL 等数据库已经对此给出了相应的解决办法。这就是标题里提到的 AUTO_INCREMENT 这一功能。使用这一功能,可以整数型数据进行自动加算。其形式如下:

CREATE TABLE DataBase_Name.Table_Name (
ID Data_Type1 AUTO_INCREMENT, Col_Name2 Data_Type2, …,
INDEX (ID));

使用 AUTO_INCREMENT 功能时,被指定的表单域会在初始值的基础上自动加 1。如果初始值为 NULL 或 0 时,在自动加 1 后变为 1。在使用 AUTO_INCREMENT 功能时,需要注意以下几个问题:

  • 在将表单域设为 AUTO_INCREMENT 时,该域必须同时设置为 INDEX。
  • 一个表单里只有一个域可以被设置为 AUTO_INCREMENT。
  • 在表单域被设置为 AUTO_INCREMENT 后,其缺省值不能被指定。
  • AUTO_INCREMENT 功能目前只支持正数的自动增加,不能使用负数。

2. 对 AUTO_INCREMENT 功能的验证

尝试向使用 AUTO_INCREMENT 功能的表单插入数据。

mysql> insert into DataBase_Name.Table_Name values(‘Test_Data1’, ‘Test_Data2’, …);

在执行上述 SQL 语句之后,可以看到 ID 的值增加了 1 。当然,如果需要,也可以直接指定 ID 的值。

mysql> insert into DataBase_Name.Table_Name values( 19, ‘Test_Data1’, ‘Test_Data2’, …);

有一点需要注意的是,AUTO_INCREMENT 功能本身是允许插入重复的值的,因此,在手动指定时,一定要注意做主键使用的 ID 一定不能重复,否则插入就会失败。下表是一个对使用 AUTO_INCREMENT 功能的表单的验证记录。

表一:AUTO_INCREMENT 功能插值记录

操作 被插入的值 下一回被插入的值
不指定 ID 值 1 2
不指定 ID 值 2 3
不指定 ID 值 3 4
删除 ID 值为 3 的记录 4
不指定 ID 值 4 5
指定 ID 值为10 10 11
删除 ID 值为 10 的记录 11
指定 ID 值为10 8 11
不指定 ID 值 11 12

 

 

 

从上面的结果中可以看到,使用 AUTO_INCREMENT 功能后,其值只能增加,不能使用小于其最大值的值。同时,被删除的值也不能被再利用。

3. 设置 AUTO_INCREMENT 的初始值

对 AUTO_INCREMENT 的初始值,其设置方法如下:

CREATE TABLE DataBase_Name.Table_Name (
ID Data_Type1 AUTO_INCREMENT, Col_Name2 Data_Type2, …,
INDEX (ID)
Auto_Increment = Value);

上述的最后一行就是对其初始值的设置命令。

总的来说,利用 AUTO_INCREMENT 功能,可以简化代码写作的工作量,但对于主键为多个域的表单,还无法支持。

参考源:AUTO_INCREMENTの設定

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です