QSQLite触发器语句
基本写法
QString updateTrigger = QString("CREATE TRIGGER up_notice_chain AFTER UPDATE OF 'dmappState' "
"ON chainInfo FOR EACH ROW WHEN(new.dmappState > 1) " //when 后面可增加更新条件
"BEGIN\n"
"INSERT INTO NoticeCustomer(EMP_ID,Content,State,Consult,NoticeType, ENTRY_DATE) VALUES (new.ID,(select dmappName from chainInfo where id = new.ID) , (select dmappState from chainInfo where id = new.ID),0,1, datetime('now','localtime'));\n" /出发器执行语句
"END;");
执行解释 当chainInfo 表里面dmappState更新值大于1时向表NoticeCustomer插入数据
如果在begin和end之间有多条SQL语句,则每条语句必须用分号隔开;end后面无需分号。
推荐一个使用工具
这里还可以直接模拟
SQLite触发器避免插入重复数据
insert or replace:如果不存在就插入,存在就更新
insert or ignore:如果不存在就插入,存在就忽略
之前看到ON DUPLICATE KEY UPDATE,但是ON DUPLICATE KEY UPDATE为Mysql特有语法。
后面看可以创建索引
CREATE UNIQUE INDEX index_name on table_name (column_name);
发现还是过滤不了。
后发现对UNIQUE约束的字段可以。
举例:
建表:
CREATE TABLE TEST(id BIGINT, name text, birthday datetime, PRIMARY KEY(id, name));
或者CREATE TABLE TEST (id BIGINT, name text, birthday datetime, UNIQUE(id, name));