SQLite 使用
//添加列
"AlTER TABLE User ADD COLUMN sync_state integer NOT NULL DEFAULT 1"
//创建表
"CREATE TABLE IF NOT EXISTS 'localuser' ('uid' INTEGER NOT NULL PRIMARY KEY autoincrement,'user_name' TEXT , 'class_name' TEXT, 'face_code' TEXT, 'card_id' TEXT,'reader_id' TEXT NOT NULL,'sync_state' INTEGER NOT NULL DEFAULT 0)"
//创建索引
"CREATE INDEX index_User_face_code ON User (face_code)"
//创建唯一索引 CREATE UNIQUE INDEX INDEX_NAME ON table_name(column_name)
"CREATE UNIQUE INDEX index_User_face_code ON User (face_code)"
//删除表 DROP TABLE TABLE_NAME
"DROP TABLE User"
关系表
ON DELETE
ON UPDATE
外键的ON DELETE和 ON UPDATE 可以用来配置 当从父表中删除某些行时发生的行为(ON DELETE). 或者修改存在的行的父键的值, 发生的行为(ON UPDATE)
NO ACTION: 当父键被修改或者删除时, 没有特别的行为发生
RESTRICT: 存在一个或者多个子键对应于相应的父键时, 禁止删除(ON DELETE RESTRICT)或者修改(ON UPDATE RESTRICT) 父键
RESTRICT与普通的外键约束的区别是, 当字段(field)更新时, RESTRICT行为立即发生
SET NULL: 父键被删除(ON DELETE SET NULL) 或者修改 (ON UPDATE SET NULL)
SET DEFAULT: 类似于SET NULL
CASCADE: 将实施在父键上的删除或者更新操作,传播给与之关联的子键.
ON DELETE CASCADE 级联删除
ON UPDATE CASCADE 级联更新
当更新或删除主键表时,那么外键表也会跟随一起更新或删除
约束
使用SQLite建表,通常会使用id
作为唯一标示,使用PRIMARY KEY
与AUTOCREMENT
进行修饰
而主键是不可以重复的。但是在这张表中还有其他的Column也不允许重复,则可以使用Unique约束
常用的约束有:
-
Unique:确保该列中的所有值是不同的
-
Not Null:确保被该约束修饰的列不会有NULL(空)值
-
Default:当该字段没有值时,使用默认值填充
-
Primary Key:唯一标识表中的各行数据,不会重复
-
Check:确保该列的值都满足条件,如果不满足,则无法插入
下面的 SQLite 创建一个新的表 COMPANY,并增加了五列。在这里,我们为 SALARY 列添加 CHECK,所以工资不能为零: CREATE TABLE COMPANY( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL CHECK(SALARY > 0) );
在 SQLite 中,ALTER TABLE 命令允许用户重命名表,或向现有表添加一个新的列。重命名列,删除一列,或从一个表中添加或删除约束都是不可能的
参考:https://www.cnblogs.com/xgcblog/archive/2011/08/25/2152918.html
https://www.jianshu.com/p/e2b946dc1374
https://www.sqlite.org/foreignkeys.html
https://www.runoob.com/sqlite/sqlite-data-types.html