关系型数据库RDB中触发器Trigger的使用详解
关系型数据库RDB中触发器Trigger的使用详解
HarmonyOS
赞
收藏 0
回答 1
待解决
相关问题
关系型数据库rdb中如何进行加密
1730浏览 • 1回复 待解决
HarmonyOS 使用rdb 关系型数据库 insert() 数据,如何去除重复?
288浏览 • 1回复 待解决
关系型数据库(RDB)希望支持不用Context也能使用
159浏览 • 1回复 待解决
关系型数据库使用分享
999浏览 • 1回复 待解决
请问ArkTS关系型数据库RDB的同步如何实现,SyncMode标签如何使用
3196浏览 • 1回复 待解决
关系型数据库使用有懂的吗?
2208浏览 • 1回复 待解决
关系型数据库rdb 创建的时候设置encrypt为true加密,自己怎么解密
339浏览 • 1回复 待解决
HarmonyOS 关系型数据库加密的问题
267浏览 • 1回复 待解决
HarmonyOS 关系型数据库批量插入数据
126浏览 • 1回复 待解决
关系型数据库有知道的吗?
2559浏览 • 1回复 待解决
如何进行关系型数据库的加密?
329浏览 • 2回复 待解决
HarmonyOS 关系型数据库RdbPredicates的复用问题
118浏览 • 1回复 待解决
关于harmony关系型数据库升级问题
6018浏览 • 1回复 待解决
关系型数据库相查询问题
124浏览 • 1回复 待解决
HarmonyOS 关系型数据库api异步返回
290浏览 • 1回复 待解决
关系型数据库插入已有的数据冲突问题
104浏览 • 1回复 待解决
HarmonyOS 关系型数据库支持哪些数据类型
374浏览 • 1回复 待解决
HarmonyOS 关系型数据库 RelationalStore 顺序插入数据乱序
375浏览 • 1回复 待解决
hormonyOS 中关系型数据库在实际应用中有哪些场景可以使用
335浏览 • 1回复 待解决
HarmonyOS 在使用关系型数据库时,如何获取boolean字段?
135浏览 • 1回复 待解决
关系型数据库RdbStore执行sql语句失败
1554浏览 • 1回复 待解决
HarmonyOS 在关系型数据库中调用deleteRdbStore函数后并未真实删除数据库,对数据库的操作依旧可用
256浏览 • 1回复 待解决
关系型数据库predicate中equalTo如何匹配空字符串
1869浏览 • 0回复 待解决
HarmonyOS IDE是否支持查看app的关系型数据库的数据?
379浏览 • 1回复 待解决
HarmonyOS 使用关系型数据库进行读写时的线程安全问题
341浏览 • 1回复 待解决
触发器(Trigger)是数据库的回调函数,指在数据库中发生特定的事件时被调用。例如,当数据库中表的某列数据发生更改时,可以使用触发器来记录本次修改的相关信息。
创建触发器Trigger
创建 触发器(Trigger) 的基本语法如下:
说明:
NEW.column-name和
OLD.column-name来引用插入、删除或更新的行元素,其中 column-name 是从与触发器关联的表的列的名称。
NEW.column-name和
OLD.column-name 时,在INSERT插入数据时,只能使用
NEW.column-name。在DELETE删除数据时,只能使用
OLD.column-name。在UPDATE更新数据时,两个皆可以使用。
tablename,而不是
database.tablename。
下面通过几个案例来说明如何使用Trigger。
例1 更新操作UPDATE触发器
假如有两个表:商品详情信息表goods_info和品类信息表goods_category,表结构信息如下:
当商品详情表goods_info中的商品名称发生改变后,在品类信息表goods_category中的商品名称也同时更新过来。此Trigger可如下编写:
在该语句中,"CREATE TRIGGER goods_category_update_trigger"为创建一个名为"goods_category_update_trigger"的触发器,该触发器执行条件为:"AFTER UPDATE OF name ON goods_info ",其语义为:当在商品详情表goods_info中的name列发生"UPDATE"更新操作后,执行下面的触发器逻辑语句。触发器逻辑语句为“UPDATE goods_category SET GOODS_NAME = NEW.name WHERE goods_category.GOODS_NAME = OLD.name;”,该语句中,"NEW.name"为数据库自带的表单函数,指在本次操作中更新后的行元素的值,"OLD.name"也是数据库自带的表单函数,其指更新前的行元素的值,可解释为:将品类信息表goods_category中的商品名称更新为表goods_info中的新商品名。
例2 新增操作INSERT触发器
如例1中的两个表:商品详情信息表goods_info和品类信息表goods_category,当商品详情表中新增某中商品信息前,品类表中对应的品类增加该商品。
在语句中,"CREATE TRIGGER goods_category_insert_trigger"为创建一个名为"goods_category_insert_trigger"的触发器,该触发器的执行条件为:" BEFORE INSERT ON goods_info FOR EACH ROW",其语义为:当表goods_info中每插入一行数据前,就执行触发器逻辑语句。触发器逻辑语句为" INSERT INTO goods_category (GOODS_ID,GOODS_NAME,CATEGORY_NAME,CREATE_TIME) values (NEW.ID,NEW.NAME,NEW.CATEGORY,datetime('now')) ;",该语句含义为:在表goods_category中插入一行数据,其中"NEW.ID"指表goods_info中新增的数据行的ID列的元素值,"NEW.NAME"指表goods_info中新增的数据的列NAME的元素值,"NEW.CATEGORY"指表goods_info中新增数据行的CATEGORY列的元素值。"datetime('now')"为数据库时间函数,指当前时间。
例3 删除操作DELETE触发器
还是上述两个表:商品详情信息表goods_info和品类信息表goods_category,当某个商品信息被删除前,即商品信息表的删除一行数据,如果该商品信息的ID小于1000,则在品类信息表中删除该商品的品类信息。该触发器如何编写呢?
如下所示:
在该语句中,"CREATE TRIGGER goods_category_delete_trigger"为创建一个名为"goods_category_delete_trigger"的触发器,该触发器的执行条件为"BEFORE DELETE ON goods_info WHEN OLD.ID < 1000",其语义为在表goods_info中删除数据前,且当该数据的ID小于1000时,就执行触发器逻辑语句。触发器逻辑语句为"DELETE FROM goods_category WHERE GOODS_ID = OLD.ID;",该语句含义为从表goods_category中删除该商品的品类信息。
查看触发器Trigger
数据库中的触发器信息皆保存在系统自建的表 sqlite_master 中,我们可以从该表中获取已创建的触发器列表。
该语句会列出数据库中所有表中已建立的触发器。
如果想查询特定表中的触发器trigger,可以使用如下方式:
该语句会列出指定表test中已建立的触发器trigger。
删除触发器Trigger
如果想删除指定的触发器Trigger,可以通过如下方式: