SQLite基础学习 互动版

说明:

  约束是在表的数据列上强制执行的规则。可以用来限制可以插入到表中的数据类型。
  这确保了数据库中数据的准确性和可靠性。
  约束可以是列级约束表级约束。列级约束适用于列,表级约束应用到表。

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>
  1. 说明上面报错的原因?
  2. 往表里插入数据,让每一个约束都报错一次,并分析原因?