SQLite主鍵是用于唯一定義行記錄的一個(gè)簡(jiǎn)單字段或多個(gè)字段的組合。一個(gè)表只能有一個(gè)主鍵。
主鍵的值不可以是一個(gè)NULL值。
主鍵通常在創(chuàng)建表時(shí)一同創(chuàng)建。在執(zhí)行CREATE TABLE語句時(shí)可以直接定義主鍵。
語法:
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)建一個(gè)“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語句中定義主鍵時(shí),也可以在創(chuàng)建表后再添加主鍵。
需要注意的是,不能使用ALTER TABLE語句來創(chuàng)建主鍵。在SQLite中需要先創(chuàng)建一個(gè)與原表一樣的新表,并在這個(gè)新表上創(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)建一個(gè)沒有主鍵的表:employees,如下語句 -
CREATE TABLE employees
(
employee_id INTEGER,
last_name VARCHAR NOT NULL,
first_name VARCHAR,
hire_date DATE
);
現(xiàn)在,運(yù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)在,它會(huì)將employees表重命名為old_employees,然后創(chuàng)建一個(gè)新表employees并創(chuàng)建主鍵,然后從old_employees表中將所有數(shù)據(jù)傳輸?shù)叫卤?employees中。
最后刪除舊表:old_employees。
DROP TABLE old_employees;
與添加主鍵一樣,不能使用ALTER TABLE語句來刪除主鍵。需要?jiǎng)?chuàng)建一個(gè)沒有(刪除)主鍵的新表,并將數(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è)有一個(gè)表engineers,并有一個(gè)主鍵:engineer_id,現(xiàn)在要?jiǎng)h除這個(gè)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)在,運(yù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;