SQLite主键

编辑时间: 2018-02-07 12:58:21    关键字:

 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)   ); 
SQL

参数说明:

  • table_name:指定要创建的表的名称。
  • column1column2:指定要在表中创建的列。
  • constraint_name:指定主键的名称。
  • pk_col1pk_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   ); 
SQL

添加主键

当没有在CREATE TABLE语句中定义主键时,也可以在创建表后再添加主键。

需要注意的是,不能使用ALTER TABLE语句来创建主键。在SQLite中需要先创建一个与原表一样的新表,并在这个新表上创建主键,然后复制旧表中的所有数据到新表中就可以了。

语法

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; 
SQL

参数说明:

  • table_name:指定要创建含有主键的表的名称。
  • old_table:指定要被修表的名称。
  • column1column2:指定要在表中创建的列。
  • constraint_name:指定主键的名称。
  • pk_col1pk_col2… pk_col_n:它指定构成主键的列。

示例:

首先创建一个没有主键的表:employees,如下语句 -

CREATE TABLE employees   (     employee_id INTEGER,       last_name VARCHAR NOT NULL,       first_name VARCHAR,       hire_date DATE   ); 
SQL

现在,运行以下命令将“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; 
SQL

现在,它会将employees表重命名为old_employees,然后创建一个新表employees并创建主键,然后从old_employees表中将所有数据传输到新表 employees中。

最后删除旧表:old_employees

DROP TABLE old_employees; 
SQL

删除主键

与添加主键一样,不能使用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; 
SQL

参数说明

  • table_name - 指定要从中删除主键的表的名称。
  • old_table - 指定在删除主键后再创建新表时,将要删除拥有主键的表名称。

示例:

假设有一个表engineers,并有一个主键:engineer_id,现在要删除这个engineer_id主键。

CREATE TABLE engineers   (     engineer_id INTEGER,       engineerr_name VARCHAR NOT NULL,       address VARCHAR,       city VARCHAR,       CONSTRAINT engineers_pk PRIMARY KEY (engineer_id)   ); 
SQL

现在,运行以下命令删除主键。

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; 
SQL

执行上面语句后,主键现在从engineers表中删除。 但是原来的表现在被重命名为old_engineers

现在删除old_engineers表,如下语句 -

DROP TABLE old_engineers;

推荐热图

合作推荐

2010-2018 可思数据版权所有 About SYKV | ICP备案:京ICP备14056871号