SQLite Primary Key主键
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)
);
参数说明:
- table_name:它指定要创建的表的名称。
- 列 1、列 2:它指定要在表中创建的列。
- constraint_name:它指定主键的名称。
- 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;
参数说明:
示例:
创建一个没有主键的表“员工”。
- Table_name:它指定一个包含主键的新表。
- Old_table:它种了必须改变的桌子。
- Constraint_name:它指定primary_key的名称。
- pk_col1,pk_col2,...pk_col_n:指定构成主键的列的名称。
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”,然后创建一个新表“雇员”并将所有数据从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;
参数说明:
示例:
假设,我们有一个主键为“engineer_id”的现有表“engineers”,我们必须删除该主键。
- table_name:它指定要从中删除主键的表的名称。
- old_table:这指定在创建删除主键的新表后将删除的原始表的名称。
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;
热门文章
优秀文章