SQLite 教程,SQLite 在线

1215SQLite Alter 命令

测试发现 sqlite3 并不支持直接添加带有 unique 约束的列:

sqlite> alter table company add department text unique;
Error: Cannot add a UNIQUE column

可以先直接添加一列数据,然后再添加 unique 索引。其实在建表的时候如果列有 unique 约束,通过查询系统表 SQLITE_MASTER 可以看到,会自动创建相应的索引。

SQLITE_TEMP_MASTER 跟 SQLITE_MASTER 是 sqlite 的系统表,SQLITE_TEMP_MASTER 表存储临时表有关的所有内容。

1214SQLite 触发器

上面没有关于 for each row 和 when 的实例,这里补充一下。

for each row 是操作语句每影响到一行的时候就触发一次,也就是删了 10 行就触发 10 次,而 for each state 一条操作语句就触发一次,有时没有被影响的行也执行。sqlite 只实现了 for each row 的触发。when 和 for each row 用法是这样的:

CREATE TRIGGER trigger_name 
AFTER UPDATE OF id ON table_1 
FOR EACH ROW 
WHEN new.id>30 
BEGIN 
UPDATE table_2 SET id=new.id WHERE table_2.id=old.id;
END;

上面的触发器在 table_1 改 id 的时候如果新的 id>30 就把 表table_2 中和表table_1 id 相等的行一起改为新的 id

1213SQLite 别名

和其他数据库类似,别名的关键字 as 可以被省略

SELECT id AS identification, name AS nickname FROM company;
SELECT id identification, name AS nickname FROM company;

结果是完全一样的。

1212SQLite 表达式

current_timestamp 得到的时间,时区不对,要想得到本地时间,试试下面这个:

sqlite> select datetime('now','localtime');
datetime('now','localtime') = 2018-09-13 16:38:32