📅  最后修改于: 2020-11-13 01:09:44             🧑  作者: Mango
SQLite主键是一个简单字段或字段组合,用于唯一定义一条记录。一个表只能有一个主键。
主键不应为NULL值。
主键通常在创建表时创建。我们在执行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)
);
参数说明:
例:
创建一个表“ WORKERS”,其中worker_id是主键。
CREATE TABLE WORKERS
( worker_id INTEGER PRIMARY KEY,
last_name VARCHAR NOT NULL,
first_name VARCHAR,
join_date DATE
);
当您尚未在CREATE TABLE语句中定义主键并且以后必须添加主键时,将使用它。
您不能使用ALTER TABLE语句创建主键。相反,您必须使用主键创建一个新表并复制旧表中的所有数据。
句法:
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;
参数说明:
例:
创建一个没有主键的“员工”表。
CREATE TABLE employees
( employee_id INTEGER,
last_name VARCHAR NOT NULL,
first_name VARCHAR,
hire_date DATE
);
现在,运行以下命令以使“ employee_id”成为主键。
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;
现在,它将雇员表重命名为“ old_employees”,然后创建一个新表“ employees”,并将所有数据从onld表转移到新表。
现在,您可以删除“ old_employees”表。
DROP TABLE old_employees;
您不能使用ALTER TABLE语句删除主键。相反,您必须创建一个删除了主键的新表,然后将数据复制到该新表中。
句法:
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;
参数说明:
例:
假设我们有一个现有表“ engineers”,其主键为“ engineer_id”,我们必须删除该主键。
CREATE TABLE engineers
(engineer_id INTEGER,
engineerr_name VARCHAR NOT NULL,
address VARCHAR,
city VARCHAR,
CONSTRAINT engineers_pk PRIMARY KEY (engineer_id)
);
现在,运行以下命令以删除主键。
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;
现在,从现有的“工程师”表中删除了主键。但是原始表现在已重命名为“ old_engineers”。
现在删除“ old_engineers”表。
DROP TABLE old_engineers;