Sqlite 约束条件 Constraints

一、约束 Constraints

 

我们在数据库中存储数据的时候,有一些数据有明显的约束条件。 比如一所学校关于教师的数据表,其中的字段列可能有如下约束:

  • 年龄 - 至少大于20岁。如果你想录入一个小于20岁的教师,系统会报错
  • 国籍 - 默认中国。所谓默认,就是如果你不填写,系统自动填上默认值
  • 姓名 - 不能为空。每个人都有名字嘛
  • 员工号 - 唯一。这个可不能乱,工资发错了就麻烦了

上面提到的大于默认不能为空唯一等等,就是数据的约束条件。 我们在用 CREATE TABLE 创建表的时候,就应该将每个字段列的约束条件事先说明(如果有的话), 以后再往表里输入数据的时候,系统会自动为我们检查是否满足约束条件,如果不满足系统会报错。

 

SQLite 常用约束如下

  • NOT NULL - 非空
  • UNIQUE - 唯一
  • PRIMARY KEY - 主键
  • FOREIGN KEY - 外键
  • CHECK - 条件检查,确保一列中的所有值满足一定条件
  • DEFAULT - 默认
  • AUTOINCREATEMENT-自增型变量

二、主键 PRIMARY KEY

我们还是进入 SQLite 命令行环境,建立一个 test.db 数据库用来做实验,如下

myqiao@ubuntu:~/My Documents/db$ sqlite3 test.db
-- Loading resources from /home/myqiao/.sqliterc
SQLite version 3.7.4
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .tables 
sqlite>  
            

运行 .tables 命令没有返回,说明数据库是空的。如果你的数据库里面有内容并影响到下面的实验, 你可以用我们上一篇学的 DROP TABLE 来删除造成影响的表, 或者用 ALTER TABLE ... RENAME TO ... 来改名。


下面言归正转,我们来说说主键 PRIMARY KEY 。

  • 首先,数据表中每一条记录都有一个主键, 这就像我们每的身份证号码、员工号、银行帐号; 反过来也可以说,每一个主键对应着一条数据记录。 所以,主键必须是唯一的。
  • 其次,一般情况下主键同时也是一个索引,所以通过主键查找记录速度比较快。
  • 第三,在关系型数据库中,一个表的主键可以作为另外一个表的外键, 这样,这两个表之间就通过这个键建立了关系。
  • 最后,主键一般是整数或者字符串,只要保证唯一就行。 在 SQLite 中,主键如果是整数类型,该列的值可以自动增长。

下面我们来做实验

sqlite>  
sqlite> CREATE TABLE Teachers(Id integer autoincreatement PRIMARY KEY,Name text);
sqlite> .tables
Teachers
sqlite> INSERT INTO Teachers(Name) Values('张三'); sqlite> INSERT INTO Teachers(Name) Values('李四'); sqlite> INSERT INTO Teachers(Name) Values('王二麻子'); sqlite> SELECT * FROM Teachers; Id Name ---------- ---------- 1 张三 2 李四 3 王二麻 sqlite> INSERT INTO Teachers(Id,Name) Values(2,'孙悟空'); Error: PRIMARY KEY must be unique sqlite> 

我们先新建了一个 Teachers 表,并设置了两个字段列,其中 Id 字段列为主键列。 然后,我们向其中插入三条数据并查询,反馈一切正常。

注意:在插入前三条数据的时候,命令中并没有明确指明 Id 的值,系统自动赋值,并且数值自动增长。

插入第四条数据的时候,我给了一个明确的 Id 编号为 2,因为李四的编号已经是 2 了, 所以系统提示我错误:主键必须唯一。

转载于:https://www.cnblogs.com/ransn/p/8067289.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值