​​SQL基礎 AUTO_INCREMENT 欄位​​

FBshark發表於2024-04-27

我們通常希望在每次插入新記錄時自動建立主鍵欄位的值。​​Auto-increment 會在新記錄插入表中時生成一個唯一的數字。​

​我們可以在表中建立一個自動增量(auto-increment)欄位。​

​​用於 MySQL 的語法​​
​以下SQL語句將 "Persons" 表中的“ID”列定義為自動遞增(auto-increment)主鍵欄位:​

​CREATE TABLE Persons
(
    ID int NOT NULL AUTO_INCREMENT,
    姓名 varchar(255) NOT NULL,
    地址 varchar(255),
    城市 varchar(255),
    省份 varchar(255),
    PRIMARY KEY (ID)
)​

​MySQL使用AUTO_INREMENT關鍵字來執行自動增量( auto-increment )任務。​

​預設情況下,AUTO_INREMENT的起始值為1,每個新記錄增加1。​

​若要以其他值開始AUTO_INREMENT序列,請使用以下SQL語法:​

​ALTER TABLE Persons AUTO_INCREMENT=100​

​要在 "Persons" 表中插入新記錄,我們不需要為"ID"欄指定值(自動新增唯一值):​

​INSERT INTO Persons (姓名,城市)
VALUES ('宋江','蓬萊市')​

​上面的SQL語句在 "Persons" 表中插入一個新記錄。“ID”欄將得到唯一值。"姓名"欄設定為"宋江","城市"欄設定為"蓬萊市"。

sqlite 建立表 AUTO_INCREMENT 失敗

SQLite中沒有AUTO_INCREMENT這個關鍵字,它使用INTEGER PRIMARY KEY來自動增長主鍵。如果你嘗試建立一個包含AUTO_INCREMENT的表,SQLite將會丟擲錯誤。

錯誤解釋:

SQLite不支援在建立表時指定AUTO_INCREMENT,它透過為表的主鍵指定INTEGER PRIMARY KEY來自動為新插入的行分配唯一的整數ID。

解決方法:

宣告一個列為 INTEGER PRIMARY KEY,無論何時插入一個NULL到該列,NULL會自動轉換為比目前所有行所記錄的數值更大的數,如果表中沒有記錄該值被賦為1.如果表中已存在的最大值是9223372036854775807,那麼會隨機選擇一個未被使用的值。舉個例子,假設你有一個表如下:

在SQLite中建立自動增長主鍵的表時,你應該這樣定義主鍵:

CREATE TABLE example_table(
    id INTEGER PRIMARY KEY,
    column1 TYPE,
    column2 TYPE,
    ...
);

其中id是自動增長的主鍵,每當你插入新行時,SQLite會自動為id分配下一個可用的整數值。請確保你的表中沒有使用AUTO_INCREMENT關鍵字。

假設你有一個表如下:

CREATE TABLE t1(
  a INTEGER PRIMARY KEY,
  b INTEGER
);

針對此表,執行如下:

INSERT INTO t1 VALUES(NULL,123);

邏輯上等同於:

INSERT INTO t1 VALUES((SELECT max(a) FROM t1)+1,123);



-----------------------------------
©著作權歸作者所有:來自51CTO部落格作者SQL資料庫開發的原創作品,請聯絡作者獲取轉載授權,否則將追究法律責任
SQL基礎知識普及(二十)——AUTO INCREMENT 欄位
https://blog.51cto.com/u_13002900/5133916


作者:Eight_Bit
連結:https://www.jianshu.com/p/671b55d702b1
來源:簡書
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。

相關文章