SQLite语句(一):表的操作和约束

316 阅读4分钟

一、表的相关操作

创建表
CREATE TABLE <表名>(<列名> <数据类型>[列级完整性约束条件]
                  [,<列名> <数据类型>[列级完整性约束条件]]…);

示例:

-- 创建学生表
CREATE TABLE Student
(
  Id INT NOT NULL UNIQUE PRIMARY KEY,
  Name VARCHAR(20) NOT NULL,
  Age INT NULL,
  Gender VARCHAR(4) NULL
);
删除表
DROP TABLE <表名>;

示例:

-- 删除学生表
DROP TABLE Student;

删除表时,为了避免错误,也可以加上IF EXISTS语句,如:

/**
*  DROP TABLE IF  EXISTS 表名
*/
DROP TABLE IF  EXISTS User
修改表
-- 添加列
ALTER TABLE <表名> [ADD <新列名> <数据类型>[列级完整性约束条件]]
-- 删除列
ALTER TABLE <表名> [DROP COLUMN <列名>]
-- 修改列
ALTER TABLE <表名> [MODIFY COLUMN <列名> <数据类型> [列级完整性约束条件]]

示例:

-- 添加学生表`Phone`列
ALTER TABLE Student ADD Phone VARCHAR(15) NULL;
-- 删除学生表`Phone`列
ALTER TABLE Student DROP COLUMN Phone;
-- 修改学生表`Phone`列
ALTER TABLE Student MODIFY Phone VARCHAR(13) NULL;

二、约束

SQLite中的约束包括以下:

  NOT NULL :确保某列不能有 NULL 值。
  UNIQUE : 确保某列中的所有值是不同的。
  PRIMARY KEY :唯一标识数据库表中的各行/记录。
  FOREIGN KEY : 外键
  CHECK :CHECK 约束确保某列中的所有值满足一定条件。
  DEFAULT : 当某列没有指定值时,为该列提供默认值。
NOT NULL 约束

默认情况下,列可以保存 NULL 值。如果您不想某列有 NULL 值,那么需要在该列上定义此约束,指定在该列上不允许 NULL 值。 NULL 与没有数据是不一样的,它代表着未知的数据。

实例: 例如,下面的 SQLite 语句创建一个新的表 COMPANY,并增加了五列,其中 ID、NAME 和 AGE 三列指定不接受 NULL 值:

CREATE TABLE COMPANY(
ID INT PRIMARY KEY    NOT NULL,
NAME          TEXT    NOT NULL,
AGE            INT    NOT NULL,
ADDRESS        CHAR(50),
SALARY        REAL
);
UNIQUE 约束

UNIQUE 约束防止在一个特定的列存在两个记录具有相同的值。在 COMPANY 表中,例如,您可能要防止两个或两个以上的人具有相同的年龄。

实例: 例如,下面的 SQLite 语句创建一个新的表 COMPANY,并增加了五列。在这里,AGE 列设置为 UNIQUE,所以不能有两个相同年龄的记录:

CREATE TABLE COMPANY(
  ID INT PRIMARY KEY    NOT NULL,
  NAME          TEXT    NOT NULL,
  AGE            INT    NOT NULL UNIQUE,
  ADDRESS        CHAR(50),
  SALARY        REAL    DEFAULT 50000.00
);
PRIMARY KEY 约束

PRIMARY KEY 约束唯一标识数据库表中的每个记录。在一个表中可以有多个 UNIQUE 列,但只能有一个主键。在设计数据库表时,主键是很重要的。主键是唯一的 ID。 我们使用主键来引用表中的行。可通过把主键设置为其他表的外键,来创建表之间的关系。由于"长期存在编码监督",在 SQLite 中,主键可以是 NULL,这是与其他数据库不同的地方。 主键是表中的一个字段,唯一标识数据库表中的各行/记录。主键必须包含唯一值。主键列不能有 NULL 值。 一个表只能有一个主键,它可以由一个或多个字段组成。当多个字段作为主键,它们被称为复合键。 如果一个表在任何字段上定义了一个主键,那么在这些字段上不能有两个记录具有相同的值。

实例:

CREATE TABLE COMPANY(
  ID INT PRIMARY KEY    NOT NULL,
  NAME          TEXT    NOT NULL,
  AGE            INT    NOT NULL,
  ADDRESS        CHAR(50),
  SALARY        REAL
);
CHECK 约束

CHECK 约束启用输入一条记录要检查值的条件。如果条件值为 false,则记录违反了约束,且不能输入到表。

实例: 例如,下面的 SQLite 创建一个新的表 COMPANY,并增加了五列。在这里,我们为 SALARY 列添加 CHECK,所以工资不能为零:

CREATE TABLE COMPANY3(
  ID INT PRIMARY KEY    NOT NULL,
  NAME          TEXT    NOT NULL,
  AGE            INT    NOT NULL,
  ADDRESS        CHAR(50),
  SALARY        REAL    CHECK(SALARY > 0)
);
DEFAULT 约束

DEFAULT 约束在 INSERT INTO 语句没有提供一个特定的值时,为列提供一个默认值。

实例: 例如,下面的 SQLite 语句创建一个新的表 COMPANY,并增加了五列。在这里,SALARY 列默认设置为 5000.00。所以当 INSERT INTO 语句没有为该列提供值时,该列将被设置为 5000.00。

CREATE TABLE COMPANY(
  ID INT PRIMARY KEY    NOT NULL,
  NAME          TEXT    NOT NULL,
  AGE            INT    NOT NULL,
  ADDRESS        CHAR(50),
  SALARY        REAL    DEFAULT 50000.00
);