开发者学堂课程【嵌入式之 RFID 开发与应用2020版:SQLite 的三种元素约束操作】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/665/detail/11231
SQLite 的三种元素约束操作
内容介绍:
一、约束
1.主键
2.唯一约束
3.检查约束
一、约束
管理如何插入或处理数据库数据的规则
常用约束分类:主键、唯一约束、检查约束
前面的课程已经讲过如何创建主键,就是在创建的元素后面加上 primary key。比如在 id 后面加上 primary key,这个 id 就成为一个主键。
现在查看已有表的 id 是不是主键:
sqlite> .schema
CREATE TABLE tbl2(id INT, name TEXT , addr TEXT);
CREATE TABLE IF NOT EXISTS"tbl"(id interger primary key,name text , addr text,sclass text) ;
如果违背主键插入数据是否会通过:
sqlite> insert into tbl(id) values ( 106);
Error: UNIQUE constraint failed: tbl.id
sqlite> insert into tbl(id) values (107);
sqlite> select*from tbl;
id name addr score class
---- -------- ------- ------ ----------
101 zs bj 40 class_A
102 ls tj 40 class_A
103 ww sh 60 class_A
104 zs cd 60 class_B
105 sw cq 90 class_B
106 xh hb 90 class_B
107
在插入 106 时报错,插入 107 成功,所以主键的作用就是保证列里面数据的唯一性。
1.主键:
惟一的标识一行(一张表中只能有一个主键)
主键应当是对用户没有意义的(常用于索引)
永远不要更新主键,否则违反对用户没有意义原则
主键不应包含动态变化的数据,如时间戳、创建时间列、修改时间列等
主键应当有计算机自动生成(保证唯一性)
如果将一列传 null,系统会自动生成;如果要指定,一定要遵循唯一性的原则。
语法: create table 表名称(列名称 1 数据类型 primary key,列名称 2 数据 类型,列名称3数据类型,...);
2. 唯一约束:
唯一约束的用法和主键类似,比如将表中的 primary key 改为 unique,之后id就不能重复,但跟主键有区别,unique 还可以约束姓名,地址列。
用来保证一个列(或一组列)中数据唯一,类似于主键,但与主键有区别
比如将表中的 primary key 改为 unique,之后 id 就不能重复
表可包含多个唯一约束,但只允许一个主键
唯一约束列可修改或更新
创建表时,通过 unique 来设置
语法:
create table 表名(列名称 1 数据类型 unique[,列名称②数据类型 unique...]);
3. 检查约束:
检查约束的作用是在输入数据时保证数据是合法数据。
用来保证一个列(或一组列)中的数据满足一组指定的条件。
指定范围,检查最大或最小范围,通过 check 实现
create table 表名(列名数据类型 check (判断语句));
要求:将 id 设为主键,对 addr 做唯一约束,对 score 进行检查约束
演示:
sqlite> create table ntbl(id INT primary key,name text , addr text unique, score INT check(score>0));
sqlite>.schema
CREATETABLE tbl2(id INT,name TEXT , addr TEXT);
CREATE TABLE IF NOT EXISTS “tbl"(id interger primary key ,name text,addr text,score integer,class text);
CREATE TABLE ntbl(id INT primary key ,name text ,addr text unique,score INT check(score>0 ))
sqlite>
/导入数据
sqlite> insert into ntbl(id ,name , addr , score) select id,name , addr , score from tbl;
sqlite> select * from ntbl;
id name addr score
---- -------- ------- ------
101 zs bj 40
102 ls tj 40
103 ww sh 60
104 zs cd 60
105 sw cq 90
106 xh hb 90
107
查看对 addr 的约束:
sqlite> insert into ntbl(addr) values ( "bj");
Error: UNIQUE constraint failed: ntbl.addr
查看对 score 的约束:
sqlitea insert into ntbl(score) values (-20);
Error:CHECK constraint failed:ntbl
假如 addr、score 都不对:
sqlite> insert into ntbl(addr , score) values( "bj",-20);
Error: CHECK constraint failed: ntbl
Addr 不对,score 对:
sqlite> insert into ntbl(addr , score) values ( "bj",80);
Error: UNIQUE constraint failed: ntbl.addr
sqlite> insert into ntbl(addr , score) values ( "sd",80);
sqlite> select * from ntbl;
id name addr score
---- -------- ------- ------
101 zs bj 40
102 ls tj 40
103 ww sh 60
104 zs cd 60
105 sw cq 90
106 xh hb 90
107
sd 80
总结:元素约束
主键约束:主要区分内容相同的行,只能有一列
唯一约束:主要保证被约束的列所有元素不能重复出现,可以设置多列
检查约束:主要约束插入或修改的元素合法性,检查条件自己设定