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));