SQLite3触发器及避免插入重复数据

1 篇文章 0 订阅

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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值