我創建了一個主鍵為 INTEGER 的表,但沒有將其指定為自動增量。盡管如此,當我向資料庫添加新行時,它會自動增加主鍵。我錯過了什么嗎?如果沒有,我們如何使主鍵不自動遞增?
我正在使用 SQLite 資料庫
代碼:
CREATE TABLE test (id INTEGER PRIMARY KEY, name TEXT);
INSERT INTO test (name) VALUES ('John');
INSERT INTO test (name) VALUES ('Mary');
給 John id 1 和 Mary id 2 即它自動遞增而不為 id 指定它
uj5u.com熱心網友回復:
這是因為在 sqlite 中,使用型別為 INTEGER PRIMARY KEY 的列會創建 rowid 的別名。如果沒有提供列值,這將自動為 INSERT 上的列分配一個 id,即 rowid。
如果您明確指定 INTEGER PRIMARY KEY AUTOINCREMENT 作為型別,它將更改使用 rowid 的默認行為。一個變化是以前洗掉的 rowids 不會被重新使用。
uj5u.com熱心網友回復:
每個品牌的 SQL 資料庫都以不同的方式實作自增主鍵。奇怪的是有這么多的變化。
在 SQLite 的情況下,如果您將主鍵列定義為INTEGER,則它隱式地是一個自動遞增列。
它必須是INTEGER,因為如果資料型別只是 ,則不會發生這種自動行為INT。
演示。
uj5u.com熱心網友回復:
D:\TEMP>sqlite3
-- Loading resources from C:\Users\Luuk/.sqliterc
SQLite version 3.37.0 2021-11-27 14:13:22
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> CREATE TABLE test (id INT PRIMARY KEY, name TEXT);
sqlite> INSERT INTO test (name) VALUES ('John');
sqlite> INSERT INTO test (name) VALUES ('Mary');
sqlite>
sqlite> SELECT * FROM test;
id name
-- ----
John
Mary
sqlite>
不,它不會自動遞增...
并且,當使用 INTEGER 時:
D:\TEMP>sqlite3
-- Loading resources from C:\Users\Luuk/.sqliterc
SQLite version 3.37.0 2021-11-27 14:13:22
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> CREATE TABLE test(id INTEGER primary key, name TEXT);
sqlite> INSERT INTO test(name) VALUES ('John');
sqlite> INSERT INTO test(name) VALUES ('Mary');
sqlite>
sqlite> SELECT * FROM test;
id name
-- ----
1 John
2 Mary
sqlite>
啊,現在在哪里遞增!
但都是記錄在案的,請參閱:https : //www.sqlite.org/autoinc.html
uj5u.com熱心網友回復:
通過設定 IDENTITY 屬性打開主鍵的自動遞增。例如:
CREATE TABLE [dbo].[Customers](
[id] [int] IDENTITY(1,1) NOT NULL,
[CompanyName] [varchar](100) NOT NULL,
[PhoneNumber] [varchar](20) NOT NULL,
[EmailAddress] [varchar](100) NOT NULL,
[CreateDate] [datetime2](7) NOT NULL,
[LastUpdated] [datetime2](7) NOT NULL,
CONSTRAINT [PK_Customers] PRIMARY KEY CLUSTERED
(
[id] ASC
)
WITH
(
PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/377836.html
