SQLite 主键

SQLite 主键

SQLite主键是用于唯一定义记录的简单字段或字段组合。一张表只能有一个主键。

主键不应为空值。

创建主键

主键通常在创建表时创建。我们在执行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: 指定要创建的表的名称。
  • column1, column2: 指定要在表中创建的列。
  • 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: 它指定了主键的名称。
  • pk_col1, pk_col2, … pk_col_n: 指定了作为主键的列的名称。

示例:

创建一个没有主键的”employees”表。

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”,并将所有数据从旧表转移到新表中。

现在,您可以删除”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; 

参数说明:

  • table_name: 指定要从中删除主键的表的名称。
  • old_table: 指定在删除了带有主键的新表之后要删除的原始表的名称。

示例:

假设我们有一张名为”engineers”的现有表,它有一个名为”engineer_id”的主键,我们需要删除该主键。

CREATE TABLE engineers
(engineer_id INTEGER,
engineer_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;

主键已经从现有的 “engineers” 表中删除。但原始表现在被重命名为 “old_engineers”。

现在删除 “old_engineers” 表。

DROP TABLE old_engineers;

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程