MySQL教程45-MySQL主鍵自增長


在 MySQL 中,當主鍵定義為自增長后,這個主鍵的值就不再需要用戶輸入數據了,而由數據庫系統根據定義自動賦值。每增加一條記錄,主鍵會自動以相同的步長進行增長。

通過給字段添加 AUTO_INCREMENT 屬性來實現主鍵自增長。語法格式如下:

字段名 數據類型 AUTO_INCREMENT

注意:

  • 默認情況下,AUTO_INCREMENT 的初始值是 1,每新增一條記錄,字段值自動加 1。
  • 一個表中只能有一個字段使用 AUTO_INCREMENT 約束,且該字段必須有唯一索引,以避免序號重復(即為主鍵或主鍵的一部分)。
  • AUTO_INCREMENT 約束的字段必須具備 NOT NULL 屬性。
  • AUTO_INCREMENT 約束的字段只能是整數類型(TINYINT、SMALLINT、INT、BIGINT 等)。
  • AUTO_INCREMENT 約束字段的最大值受該字段的數據類型約束,如果達到上限,AUTO_INCREMENT 就會失效。

例 1

定義數據表 student2,指定表中 id 字段遞增,SQL 語句和運行結果如下:

mysql> CREATE TABLE tb_student(
    -> id INT(4) PRIMARY KEY AUTO_INCREMENT,
    -> name VARCHAR(25) NOT NULL
    -> );
Query OK, 0 rows affected (0.07 sec)

其中,id 為主鍵,每插入一條新記錄,id 的值就會在前一條記錄的基礎上自動加 1。name 為非空字段,該字段的值不能為空值(NULL)。

向 student2 表中插入數據,SQL 語句如下所示:

INSERT INTO tb_student(name) VALUES ('Java'), ('MySQL');

語句執行完后,student2 表中增加了 2 條記錄,在這里並沒有輸入 id 的值,但系統已經自動添加該值,使用 SELECT 命令查看記錄,如下所示。

加上 AUTO_INCREMENT 約束條件后,字段中的每個值都是自動增加的。因此,這個字段不可能出現相同的值。通常情況下,AUTO_INCREMENT 都是作為 id 字段的約束條件,並且將 id 字段作為表的主鍵。

指定自增字段初始值

如果第一條記錄設置了該字段的初始值,那么新增加的記錄就從這個初始值開始自增。例如,如果表中插入的第一條記錄的 id 值設置為 5,那么再插入記錄時,id 值就會從 5 開始往上增加。

例 2

下面創建表 student3,指定主鍵從 100 開始自增長。SQL 語句和運行結果如下:

mysql> create table if not exists student3
    -> (
    -> id int(11) primary key auto_increment,
    -> name varchar(25) not null
    -> ) auto_increment=100;
Query OK, 0 rows affected, 1 warning (0.37 sec)

向 student3 表中插入數據,並使用 SELECT 命令查詢表中記錄。

由結果可以看出,id 值從 100 開始自動增長。

自增字段值不連續

下面我們通過一個實例分析自增字段的值為什么不連續。

例 3

創建表 student4,其中 id 是自增主鍵字段,name 是唯一索引,SQL 語句和執行結果語句如下:

mysql> create table if not exists student4
    -> (
    -> id int(4) primary key auto_increment,
    -> name varchar(25) unique key,
    -> age int(4) default null
    -> );
Query OK, 0 rows affected, 2 warnings (0.47 sec)

向 student4 表中插入數據,SQL 語句如下:

mysql> insert into student4 values (null, 'Java', 1);

此時表student4中已經有了(1, 'Java', 1)這條數據, 如果再次插入一樣的數據(id列值為null,自增)

由於表中已經存在 name='Java' 的記錄,所以報 Duplicate key error(唯一鍵沖突)。在這之后,再插入新的數據時,自增 id 就是 3,這樣就出現了自增字段值不連續的情況。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM