三度网教程:是一个免费提供流行视频软件教程、在线学习分享的学习平台!

对于MySQL触发器的问题

时间:2022-10-23作者:未知来源:三度网教程人气:


SQL是Structured Query Language(结构化查询语言)的缩写。SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言。在使用它时,只需要发出“做什么”的命令,“怎么做”是不用使用者考虑的。SQL功能强大、简单易学、使用方便,已经成为了数据库操作的基础,并且现在几乎所有的数据库均支持SQL。

trigger

Mysql中触发器是一种与表操作有关的数据库对象,当触发器所在表上出现指定事件时,将调用该对象,即表的操作事件触发表上的触发器的执行。

有时在改变表的的某些数据,同时也希望其他相关表中的数据也改变,利用触发器就能满足这样的需求。运用触发器不公可以简化程序,而且可以增加程序的灵活性。

创建触发器语法如下:

create trigger name(触发器名称) after/befor(触发时间) insert/update/delete(触发事件,当填写其中一种,其它的操作不会激活触发器) on (监视的表,即在哪张表上建立触发器 ) for each row (行级触发器) begin (sql语句,希望改变的数据,可写多条语句,每条语句必须用 ; 结尾) end;

以上sql语句写上 ; 后就会执行,触发器未写完报错!

这时就会用到 DELIMITER 命令(delimiter 是定界符,分隔符的意思),它是一条命令,不需要语句结束标识,语法 为:

DELIMITER ;;(可以把mysql的结束标识设为其它的符号,如 ;; 或 $ 还可以设为多个长度)

在这之后的语句,以分号结束触发器不会有什么反应,只有遇到了 ;;,才认为是结束语句。注意:使用完之后,要记得把它修改回来!

假设系统中有两个表:
商品表 goods(商品ID gid, 商品名称 goods_name,商品数量 goods_num)
订单表 ord(订单oid ,商品ID gid,订单数量 goods_much )
要创建触发器来使商品表中的商品数量随着订单表的订单数量自动更新,代码如下:

delmiter $ #判断库存是否足够 create trigger t1 before insert on ord for each row begin #声明变量 declare goods_num int; select num into goods_num from goods where gid = new.gid; #判断 if new.much > goods_num then set new.much = goods_num; end if; update goods set num = num - new.much where gid=new.gid end$ delmiter ;

MySQL 中使用 declare 来定义一局部变量,该变量只能在 BEGIN … END 复合语句中使用,并且应该定义在复合语句的开头,

上述示例中使用了NEW关键字,和 MS SQL Server 中的 INSERTED 和 DELETED 类似,MySQL 中定义了 NEW 和 OLD,用来表示触发器的所在表中,触发了触发器的那一行数据。
具体地:
在 INSERT 型触发器中,NEW 用来表示将要(BEFORE)或已经(AFTER)插入的新数据;
在 UPDATE 型触发器中,OLD 用来表示将要或已经被修改的原数据,NEW 用来表示将要或已经修改为的新数据;
在 DELETE 型触发器中,OLD 用来表示将要或已经被删除的原数据;

以上就是关于MySQL触发器的问题的详细内容,更多请关注php中文网其它相关文章!


学习教程快速掌握从入门到精通的SQL知识。

关键词:  对于MySQL触发器的问题





Copyright © 2012-2018 三度网教程(http://www.3du8.cn) .All Rights Reserved 网站地图 友情链接

免责声明:本站资源均来自互联网收集 如有侵犯到您利益的地方请及时联系管理删除,敬请见谅!

QQ:1006262270   邮箱:kfyvi376850063@126.com   手机版