说明:
约束是在表的数据列上强制执行的规则。可以用来限制可以插入到表中的数据类型。
这确保了数据库中数据的准确性和可靠性。
约束可以是列级约束或表级约束。列级约束适用于列,表级约束应用到表。
SQLite中常用的约束。
1. NOT NULL 约束:确保某列不能有 NULL 值。
2. DEFAULT 约束:当某列没有指定值时,为该列提供默认值。
3. UNIQUE 约束:确保某列中的所有值是不同的。
4. PRIMARY Key 约束:唯一标识数据库表中的各行/记录。
5. CHECK 约束:CHECK 约束确保某列中的所有值满足一定条件。
NOT NULL 约束:
默认情况下,列可以保存 NULL 值。如果您不想某列有 NULL 值,那么需要在该列上定义此约束,指定在该列上不允许 NULL 值。
NULL 与没有数据是不一样的,它代表着未知的数据。
DEFAULT 约束:
DEFAULT 约束在 INSERT INTO 语句没有提供一个特定的值时,为列提供一个默认值。
UNIQUE 约束:
UNIQUE 约束防止在特定的列存在两个记录具有相同的值。比如,我们可以让NAME不存在相同的。
CHECK 约束:
CHECK 约束启用输入一条记录要检查值的条件。如果条件值为 false,则记录违反了约束,且不能输入到表。
PRIMARY KEY 约束:
PRIMARY KEY(主键) 约束唯一标识数据库表中的每个记录。
在一个表中可以有多个UNIQUE 列,但只能有一个主键。在设计数据库表时,主键是很重要的。主键是唯一的 ID。
我们使用主键来引用表中的行。可通过把主键设置为其他表的外键,来创建表之间的关系。由于"长期存在编码监督",在 SQLite 中,主键可以是 NULL,这是与其他数据库不同的地方。
主键是表中的一个字段,唯一标识数据库表中的各行/记录。主键必须包含唯一值。主键列不能有NULL值。
一个表只能有一个主键,它可以由一个或多个字段组成。当多个字段作为主键,它们被称为复合键。
如果一个表在任何字段上定义了一个主键,那么在这些字段上不能有两个记录具有相同的值。
实例:
像下面这样创建表:
create table bound_test(
ID int primary key not NULL, --主键约束
NAME TEXT NOT NULL,--not null 约束
AGE INT CHECK(AGE>0), --CHECK约束,AGE要大于0
WEIGHT INT UNIQUE, --UNIQUE 约束,体重不能相等(虽然不恰当哈)
ADDRESS CHAR(50) DEFAULT 'shenzhen' --DEFAULT约束,默认为深圳
);
往里面插入数据:
sqlite> insert into bound_test values(1, 'huahua', 10, 45, 'beijing');
sqlite> select * from bound_test;
ID NAME AGE WEIGHT ADDRESS
---------- ---------- ---------- ---------- ----------
1 huahua 10 45 beijing
sqlite> insert into bound_test(ID, NAME, AGE, WEIGHT) values(2, 'hua', 10, 50);
sqlite> select * from bound_test;
ID NAME AGE WEIGHT ADDRESS
---------- ---------- ---------- ---------- ----------
1 huahua 10 45 beijing
2 hua 10 50 shenzhen
sqlite> insert into bound_test values(3, 'hong', 10, 45, 'beijing');
Error: UNIQUE constraint failed: bound_test.WEIGHT
sqlite>
2. 往表里插入数据,让每一个约束都报错一次,并分析原因?