一、一些基本概念
主键:确保行的唯一性和可寻址。
二、约束
1、主键
SQLite会自动定义主键无论是否定义均存在。自定义类型为64位整数,键名为rowid,别名:_rowid或oid。当自定义一个主键时,自定义的名字也是一个别名。主键提供自增长机制,当达到最大值时,会搜索未使用的主键值来使用。
2、约束的书写格式
CREATE TABLE user(
id integer PRIMARY KEY,
name text NOT NULL COLLATE NOCASE,
phone text NOT NULL DEFAULT "UNKNOWN",
UNIQUE(name,phone),
CHECK(length(phone)>=7)
);
代码解析
- id:数据类型为int,约束为主键
- name:数据类型为文本,约束:不为空,不区分大小写
- phone:数据类型为文本,约束:不为空,默认值是UNKNOWN
- 约束:name和phone字段的组合具有唯一性
- 约束:phone字段的长度大于等于7
三、一些约束
1、唯一性约束
UNIQUE
2、不为空约束
NOT NULL
3、自动增长约束
AUTOINCREMENT
- 自增长约束
- 不回收旧的值
- 达到64为最大值时再插入值会报错
- 可以通过INSERT语句查询 ,小于当前计数值的值
DEFAULT:默认值,可以使用ANSI/ISO的保留字表示时间和日期:CURRENT_TIME CURRENT_DATE CURRENT_TIMESTAMP
CREATE TABLE table_name1 (log_data NOT NULL DEFAULT CURRENT_TIMESTAMP);
4、不区分文字大小写约束
COLLATE NOCASE
5、输入值约束
CHECK:对输入的值进行检查的约束
6、外键约束
确保一个表格中的字段是另外一个表格的字段的引用。一般是用于父子关系或主从关系。
CREATE TABLE tablename(
column_defintion REFERENCES foreign_table(column_name)
ON {DELETE | UPDATE} integrity_action
[NOT] deferrable [INITIALLY {DEFERRABLE|IMMEDIATE},]
...
);
此约束主要分三个部分
- 定义外键约束
- 当外键更改或者删除的时候执行什么规则
- 约束是立即执行还是延迟执行
父类变更规则
- SET NULL:设置为NULL
- SET DEFAULT:修改为默认值
- CASCADE:更新时,更改子字段。删除时,删除所有子字段。
- RESTRICT:终止事务
- NO ACTION:不执行任何操作
留言