SQLite3觸發器及避免插入重複數據

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

發佈了18 篇原創文章 · 獲贊 4 · 訪問量 3072
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章