关系型数据库RDB中触发器Trigger的使用详解
关系型数据库RDB中触发器Trigger的使用详解
HarmonyOS
赞
收藏 0
回答 1
待解决
相关问题
关系型数据库rdb中如何进行加密
522浏览 • 1回复 待解决
请问ArkTS关系型数据库RDB的同步如何实现,SyncMode标签如何使用
1867浏览 • 1回复 待解决
关系型数据库使用分享
410浏览 • 1回复 待解决
关系型数据库使用有懂的吗?
1140浏览 • 1回复 待解决
关系型数据库有知道的吗?
1242浏览 • 1回复 待解决
关于harmony关系型数据库升级问题
4695浏览 • 1回复 待解决
关系型数据库predicate中equalTo如何匹配空字符串
585浏览 • 0回复 待解决
关系型数据库RdbStore执行sql语句失败
500浏览 • 1回复 待解决
关系型数据库getRdbStore初始化问题有懂的吗?
928浏览 • 1回复 待解决
云数据库RDS和云原生关系型数据库PolarDB有什么区别?
2041浏览 • 1回复 待解决
ArkTS如何操作关系型数据库@ohos.data.relationalStore
2866浏览 • 2回复 已解决
鸿蒙的RDB数据库好用吗
1271浏览 • 2回复 已解决
关系型数据库如何在设备间同步数据、如何查询其它设备上的数据
444浏览 • 1回复 待解决
关系型数据库和轻量级存储的区别是什么
699浏览 • 1回复 待解决
使用JS开发一个APP,使用关系型数据库做数据的持久化该怎么做?
2340浏览 • 1回复 待解决
使用键值型数据库选择加密数据库后如何解密查看
498浏览 • 1回复 待解决
关系数据库如何保存图片?
6629浏览 • 2回复 待解决
如何使用鸿蒙JS创建关系数据库及数据表?
909浏览 • 1回复 待解决
键值型数据库跨设备数据同步demo
389浏览 • 1回复 待解决
在使用对象关系映射数据库的时候引入annotation包报错
4277浏览 • 1回复 已解决
zabbix增加web告警,触发器没有告警怎么回事?
1374浏览 • 1回复 待解决
mysql的触发器和事物可以结合一起使用吗?
800浏览 • 1回复 待解决
API 9 Stage模式下关系型数据库不支持升级,这个问题有点严重
919浏览 • 1回复 待解决
在关系型数据库我存多条(未知条数)数据进去,要怎么把数据全部取出来展示出来?
860浏览 • 1回复 待解决
如何使用网络接口获取数据库MySQL中的数据
695浏览 • 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,可以通过如下方式: