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;  

热门文章

优秀文章