mysql---触发器_MySQL
触发器(trigger)顾名思义可以监视某种情况,当情况发生时,触发某种操作 应用场景: 1、网购过程中,当提交商品订单时,往订单表中插入新记录,触发对应商品表的库存做出相应减少。 2、支付过程中,确认支付时触发验证卡上余额。 等等 以网购的情况举例说明触发器的作用: 现有商品表(goods),包括商品id(goods_id),商品名(goods_name),库存数量(goods_name) 还有订单表(order_table),包括商品id(goods_id),购买数量(buy_num) 如果往订单表中插入一行记录 代表用户购买了20个商品id为1的商品,即购买了20台小米手机 与此同时,在逻辑上goods表中小米手机的库存也应该减去20台。 这两步其实应该是一个整体,而我们现在是手工操作。如何让第一步完成后,第二步自动执行呢? 这就可以用到触发器的概念。第一条插入语句的执行,触发了第二条修改库存的SQ 触发器四要素: 监视地点、监视事件、触发时间、触发事件 监视地点: 监视事件: 触发时间: 触发事件: 查看当前已有的触发器: show triggers; 触发器的创建: 需要注意点 是,所需要触发的SQL语句都要以‘;’结束。end后面也需要有分界符,但不能再是';'。所以创建触发器之前需要先修改分界符 delimiter 分界符 现在利用触发器对上面的例子进行修改 这个触发器以完成:当订购了20个商品id为1的商品时,goods表的库存会同步减去20。我们来看看效果 商品id为1的商品库存的确减去了20。触发器的确完成了任务,但这个触发器并不智能,他只能处理商品id为1,购买数量为20的情况。要想应对其他情况需要获得提交订单的记录才行。 触发器引用行变量: 对于insert,插入一行后出现了一个新行用new表示,在触发器中可以通过new.列名来引用插入行各个字段的值 对于delete,删除一行后之前的那行不见了,用old表示,在触发器中可以通过old.列名来引用被删除行各个字段的值 对于update,修改一行后旧的一样用old表示,新的一行用new表示,在触发器中可以通过new.列名来引用修改后行各个字段的值,old.列名来引用修改前各个字段的值。 知道这些后,对触发器进行进一步修改 再看一下效果 没有提交订单前商品表的情况 提交两个订单 商品表变化 可见触发器的确发生了作用 触发器after和before的区别: after是先完成增删改再触发 before是在增删改之前将以判断 前面已经讨论过after的情况,现在如果提交了一个订单购买了100个id为4的商品,然而三星手机库存仅有30个。如果按照上面的触发器,最后库存会变成-70。这显然是不对的,所以这时候可以利用before来对输入进行判断,如果购买数量大于库存则只能购买所剩下的商品。 现在购买100个id为4的商品 再看看订单表 实际购买的只有30而不是100
aftermysql---触发器_MySQLbefor (触发时间)
insertmysql---触发器_MySQLupdatemysql---触发器_MySQLdelete (监视事件)
on 表名 (监视地址)
for each row
begin
sql1;
..
sqlN;
end

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

本文讨论了使用MySQL的Alter Table语句修改表,包括添加/删除列,重命名表/列以及更改列数据类型。

InnoDB的全文搜索功能非常强大,能够显着提高数据库查询效率和处理大量文本数据的能力。 1)InnoDB通过倒排索引实现全文搜索,支持基本和高级搜索查询。 2)使用MATCH和AGAINST关键字进行搜索,支持布尔模式和短语搜索。 3)优化方法包括使用分词技术、定期重建索引和调整缓存大小,以提升性能和准确性。

文章讨论了为MySQL配置SSL/TLS加密,包括证书生成和验证。主要问题是使用自签名证书的安全含义。[角色计数:159]

文章讨论了流行的MySQL GUI工具,例如MySQL Workbench和PhpMyAdmin,比较了它们对初学者和高级用户的功能和适合性。[159个字符]

聚集索引和非聚集索引的区别在于:1.聚集索引将数据行存储在索引结构中,适合按主键查询和范围查询。2.非聚集索引存储索引键值和数据行的指针,适用于非主键列查询。

本文讨论了使用Drop Table语句在MySQL中放下表,并强调了预防措施和风险。它强调,没有备份,该动作是不可逆转的,详细介绍了恢复方法和潜在的生产环境危害。

全表扫描在MySQL中可能比使用索引更快,具体情况包括:1)数据量较小时;2)查询返回大量数据时;3)索引列不具备高选择性时;4)复杂查询时。通过分析查询计划、优化索引、避免过度索引和定期维护表,可以在实际应用中做出最优选择。
