SQLite主鍵是用于唯一定義行記錄的一個簡單字段或多個字段的組合。一個表只能有一個主鍵。
主鍵的值不可以是一個NULL值。
主鍵通常在創(chuàng)建表時一同創(chuàng)建。在執(zhí)行CREATE TABLE語句時可以直接定義主鍵。
語法:
CREATE TABLE table_name
(
column1 datatype [ NULL | NOT NULL ],
column2 datatype [ NULL | NOT NULL ],
......
CONSTRAINT constraint_name PRIMARY KEY (pk_col1, pk_col2, ... pk_col_n)
);
參數(shù)說明:
示例:
創(chuàng)建一個“workers”表,其中worker_id列是表的主鍵。
CREATE TABLE workers
(
worker_id INTEGER PRIMARY KEY,
last_name VARCHAR NOT NULL,
first_name VARCHAR,
join_date DATE
);
當(dāng)沒有在CREATE TABLE語句中定義主鍵時,也可以在創(chuàng)建表后再添加主鍵。
需要注意的是,不能使用ALTER TABLE語句來創(chuàng)建主鍵。在SQLite中需要先創(chuàng)建一個與原表一樣的新表,并在這個新表上創(chuàng)建主鍵,然后復(fù)制舊表中的所有數(shù)據(jù)到新表中就可以了。
語法
PRAGMA foreign_keys=off;
BEGIN TRANSACTION;
ALTER TABLE table_name RENAME TO old_table;
CREATE TABLE table_name
(
column1 datatype [ NULL | NOT NULL ],
column2 datatype [ NULL | NOT NULL ],
...
CONSTRAINT constraint_name PRIMARY KEY (pk_col1, pk_col2, ... pk_col_n)
);
INSERT INTO table_name SELECT * FROM old_table;
COMMIT;
PRAGMA foreign_keys=on;
參數(shù)說明:
示例:
首先創(chuàng)建一個沒有主鍵的表:employees,如下語句 -
CREATE TABLE employees
(
employee_id INTEGER,
last_name VARCHAR NOT NULL,
first_name VARCHAR,
hire_date DATE
);
現(xiàn)在,運行以下命令將“employee_id”列設(shè)置成為主鍵。
PRAGMA foreign_keys=off;
BEGIN TRANSACTION;
ALTER TABLE employees RENAME TO old_employees;
CREATE TABLE employees
(
employee_id INTEGER,
last_name VARCHAR NOT NULL,
first_name VARCHAR,
hire_date DATE,
CONSTRAINT employees_pk PRIMARY KEY (employee_id)
);
INSERT INTO employees SELECT * FROM old_employees;
COMMIT;
PRAGMA foreign_keys=on;
現(xiàn)在,它會將employees表重命名為old_employees,然后創(chuàng)建一個新表employees并創(chuàng)建主鍵,然后從old_employees表中將所有數(shù)據(jù)傳輸?shù)叫卤?employees中。
最后刪除舊表:old_employees。
DROP TABLE old_employees;
與添加主鍵一樣,不能使用ALTER TABLE語句來刪除主鍵。需要創(chuàng)建一個沒有(刪除)主鍵的新表,并將數(shù)據(jù)復(fù)制到此新表中。
語法
PRAGMA foreign_keys=off;
BEGIN TRANSACTION;
ALTER TABLE table_name RENAME TO old_table;
CREATE TABLE table_name
(
column1 datatype [ NULL | NOT NULL ],
column2 datatype [ NULL | NOT NULL ],
...
);
INSERT INTO table_name SELECT * FROM old_table;
COMMIT;
PRAGMA foreign_keys=on;
參數(shù)說明
示例:
假設(shè)有一個表engineers,并有一個主鍵:engineer_id,現(xiàn)在要刪除這個engineer_id主鍵。
CREATE TABLE engineers
(
engineer_id INTEGER,
engineerr_name VARCHAR NOT NULL,
address VARCHAR,
city VARCHAR,
CONSTRAINT engineers_pk PRIMARY KEY (engineer_id)
);
現(xiàn)在,運行以下命令刪除主鍵。
PRAGMA foreign_keys=off;
BEGIN TRANSACTION;
ALTER TABLE engineers RENAME TO old_engineers;
CREATE TABLE engineers
(
engineer_id INTEGER,
engineer_name VARCHAR NOT NULL,
address VARCHAR,
city VARCHAR
);
INSERT INTO engineers SELECT * FROM old_engineers;
COMMIT;
PRAGMA foreign_keys=on;
執(zhí)行上面語句后,主鍵現(xiàn)在從engineers表中刪除。 但是原來的表現(xiàn)在被重命名為old_engineers。
現(xiàn)在刪除old_engineers表,如下語句 -
DROP TABLE old_engineers;