SQLite主键

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:指定要创建的表的名称。
  • 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  
);

添加主键

当没有在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;

参数说明:

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

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

现在,它会将employees表重命名为old_employees,然后创建一个新表employees并创建主键,然后从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,现在要删除这个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;

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

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

DROP TABLE old_engineers;

猿狮妹
2023-02-06
SQLite 主键 编程课程
热门教程
1 SQLite主键 SQLite主键是用于唯一定义行记录的一个简单字段或多个字段的组合。一个表只能有一个主键。 主键的值不可以是一个NULL值。 创建主键主键通常在创建
2 Java连接SQLite数据库 要使用java程序连接SQLite,并与SQLite进行数据存取操作,必须在系统上设置SQLite JDBC驱动程序和安装Java JDK。按照以下步骤进行: 从sqlite-jdbc存储库下载
3 SQLite COUNT()函数 SQLite COUNT()函数用于检索表达式或给定列的行数。 语法 SELECT COUNT(aggregate_expression) FROM tables [WHERE conditions]; 在GROUP BY子句中使用COUNT()函数时的语
4 SQLite左连接 类似于INNER JOIN子句,LEFT JOIN子句是SELECT语句的可选子句。可以使用LEFT JOIN子句来查询来自多个相关表的数据。 假设有两个表:A和B A表有m和f字段。B
5 SQLite教程 SQLite是一款轻型,遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,占用资源非常的低,可能只需要几百K的内存就够了。SQLite一个新版本 SQLite3已经发布。
6 PHP连接SQLite数据库 SQLite3扩展名在PHP 5.3.0+以上都会默认启用。可以在编译时使用--without-sqlite3来禁用它。 Windows用户可通过启用php_sqlite3.dll才能使用此扩展。 php_sqlite3.dll默
7 SQLite更新查询 在SQLite中,UPDATE查询用于修改表中的现有记录。 它与WHERE子句一起作为条件使用以选择特定行,否则所有行将被更新。 语法 UPDATE table_name SET column1 =
8 SQLite日期和时间 在SQLite中,date()和time()函数用于检索当前日期和时间。日期和时间函数使用IS0-8601日期和时间格式的子集。 在SQLite中有6种不同的日期和时间函数返回,
9 SQLite触发器(更新之前/之后) SQLite触发器(更新之前/之后)指定了如何在更新数据后执行触发器操作。 假设有两个表company和audit,在这里要对在company表中的每个记录更新时进行审核。
10 SQLite now函数和时间格式化 SQLite “now”实际上并不是一个函数,但是“now”是一个时间字符串参数,用于各种SQLite函数来获取当前的日期和时间。 语法: SQLite中now函数有三种类
SQLite 教程
  • Copyright © 2021 猿狮院, All rights reserved.