搜索
您的当前位置:首页正文

MySQL数据库触发器(trigger)_MySQL

2023-11-21 来源:知库网

MySQL触发器(trigger):监视某种情况并触发某种操作

一:四要素

触发时间:before/after

地点:table

监视操作:insert/update/delete

触发操作:insert/update/delete

二:创建触发器

delimiter $ #将sql结束符改为$ 方便写触发的sql语句

create trigger triggerName after/before insert/update/delete on tableName

for each row

begin

sql语句; #想要触发的语句

end$

测试表:商品表(g),订单表(o)

三:删除监视器

drop trigger triggerName

四:下定单(o),商品表(g)数据触发更新

create trigger tg after insert on o

for each row

begin

update g set num=num-new.much where id=new.gid;

end$

PS:对于监视操作insert 而言,新增的行用new 表示

行中的每一列的值,用new.列名 取出

五:删除一个订单,商品表相应增加

create trigger tg after delete on o

for each row

begin

update g set num=num+old.much where id=old.gid;

end$

六:修改一个订单,商品表相应改变

create trigger tg after update on o

for each row

begin

update g set num=num+old.much-new.much where id=old.gid;

end$

七:after与before区别

after 是先完成数据的增删改,再触发,前面的数据操作完成

before是先触发,判断触发的条件是否满足,再对数据进行增删改操作

小编还为您整理了以下内容,可能对您也有帮助:

mysql触发器(MySQL触发器(定义、使用及示例))

MySQL触发器是一种特殊的存储过程,它是由MySQL服务器自动执行的一种数据库对象。当指定的事件发生时,触发器会被激活并执行相应的操作。这些事件可以是INSERT、UPDATE或DELETE语句的执行,也可以是表的创建或删除。MySQL触发器可以用于实现数据的自动更新、数据的验证和数据的审计等功能。

MySQL触发器的定义

MySQL触发器的定义包含以下几个部分:

1.触发器的名称:用于标识触发器的名称。

2.触发器的事件:触发器所要监控的事件,可以是INSERT、UPDATE或DELETE语句的执行,也可以是表的创建或删除。

3.触发器所在的表:触发器所要监控的表。

4.触发器的执行时间:触发器所要执行的时间,可以是BEFORE或AFTER。

5.触发器的执行语句:触发器所要执行的SQL语句。

MySQL触发器的使用

下面是一个MySQL触发器的示例:

```

CREATETRIGGER`trigger_name`BEFOREINSERTON`table_name`

FOREACHROWBEGIN

--触发器所要执行的SQL语句

END;

```

触发器的名称为`trigger_name`,它所要监控的事件是INSERT语句的执行,它所在的表为`table_name`,它所要执行的时间是BEFORE,它所要执行的SQL语句可以在BEGIN和END之间编写。

MySQL触发器的示例

下面是一个MySQL触发器的示例,该触发器在每次向`employee`表中插入新记录时,自动更新`department`表中的员工人数。

```

CREATETRIGGER`update_department_count`

AFTERINSERTON`employee`

FOREACHROWBEGIN

UPDATE`department`SET`count`=`count`+1WHERE`department_id`=NEW.`department_id`;

END;

```

该触发器的名称为`update_department_count`,它所要监控的事件是INSERT语句的执行,它所在的表为`employee`,它所要执行的时间是AFTER,它所要执行的SQL语句为UPDATE语句,它将`department`表中对应部门的员工人数加1。

MySQL触发器的注意事项

1.MySQL触发器只能在表级别上创建,不能在行级别上创建。

2.MySQL触发器可以使用NEW和OLD关键字来引用插入、更新或删除的行的值。

3.MySQL触发器可以使用IF和CASE语句来进行条件判断。

4.MySQL触发器可以使用RAISE_APPLICATION_ERROR函数来抛出异常。

MySQL触发器如何正确使用

以下的文章主要描述的是如何对MySQL触发器进行正确使用, MySQL数据库是在5.0 以后的相关版本中对MySQL触发器进行引用,有时也可以用相关的触发器对数据的完整性进行维护。如我有一个表ge_element。 该表中有一个region_id,对应到ge_region表中的id,但是,以下的文章主要描述的是如何对MySQL触发器进行正确使用, MySQL数据库是在5.0 以后的相关版本中对MySQL触发器进行引用,有时也可以用相关的触发器对数据的完整性进行维护。如我有一个表ge_element。

该表中有一个region_id,对应到ge_region表中的id,但是,region_id是可以为空的,所以不应该设置外键约束,而我在删除ge_region表中的记录时,希望把在ge_element表中被引用到的记录的region_id设为0,因为没有数据库的外键约束,我只能在程序中操作,但我又不想通过程序来操作,因为引用region_id的表可能不只ge_element一个,这时,就可能用到MySQL触发器,在删除ge_region表中的记录时,把被引用的表中的region_id设为0。

1.创建触发器的语句:

CREATE TRIGGER

{ BEFORE | AFTER }

{ INSERT | UPDATE | DELETE }

ON

FOR EACH ROW

触发器必须有名字,最多64个字符,可能后面会附有分隔符.它和MySQL中其他对象的命名方式基本相象.

这里我有个习惯:就是用表的名字+'_'+触发器类型的缩写.因此如果是表t26,触发器是在事件UPDATE(参考下面的点(2)和(3))之前(BEFORE)的,那么它的名字就是t26_bu。

可以直接在EMS中创建触发器。

2.触发时间:

Before表示在事件发生之前执行MySQL触发器,After表示在事件发生之后执行触发器;

3.触发事件:

三个事件:insert, update, delete

4.触发器与表的关系:

触发器是属于一个表的,当在这个表上执行insert, update, delete操作时,就会导致相应的触发器被激活;

不能给同一个表的同一个操作创建两个不同的触发器。

5.触发间隔:

FOR EACH ROW 子句通知MySQL触发器每隔一行执行一次动作,而不是对整下表执行一次。

6.触发的SQL语句:

触发器包含所要触发的SQL语句:这里的语句可以是任何合法的语句,包括复合语句,但是这里的语句受的和函数的一样。

复合语句(BEGIN / END)是合法的.

流控制(Flow-of-control)语句(IF, CASE, WHILE, LOOP, WHILE, REPEAT, LEAVE,ITERATE)也是合法的.

变量声明(DECLARE)以及指派(SET)是合法的.

允许条件声明.

异常处理声明也是允许的.

但是在这里要记住函数有受限条件:不能在函数中访问表.因此在函数中使用以下语句是非法的。

7.创建触发器的权限:

你必须要有相当大的权限才能够创建MySQL触发器;我在创建触发器的时候提示要有super privilege才可以创建;

简述MySQL数据库中九种基本对象的定义?

MySQL数据库中九种基本对象的定义如下:
1. 数据库(Database):数据库是一组相关数据的集合,用于存储和管理数据。
2. 表(Table):表是数据库中的一个对象,用于存储数据。表由行和列组成,每行表示一个记录,每列表示一个字段。
3. 视图(View):视图是一个虚拟表,它是由一个或多个表的查询结果组成的。视图可以简化复杂的查询操作,提高查询效率。
4. 索引(Index):索引是一种数据结构,用于加快数据的查找速度。索引可以加速数据的检索,但会增加数据的存储空间和维护成本。
5. 存储过程(Stored Procere):存储过程是一组预定义的SQL语句,可以在数据库中存储和重复使用。存储过程可以提高数据库的性能和安全性。
6. 函数(Function):函数是一段可重用的代码,用于执行特定的操作。函数可以接受参数,并返回一个值。
7. 触发器(Trigger):触发器是一种特殊的存储过程,它会在特定的数据库操作(如插入、更新、删除)发生时自动执行。
8. 用户(User):用户是数据库中的一个对象,用于控制数据库的访问权限。用户可以被授予不同的权限,以*对数据库的访问。
9. 权限(Privilege):权限是用户或角色对数据库对象的访问权限。权限可以控制用户或角色对数据库的读、写、修改等操作。

简述MySQL数据库中九种基本对象的定义?

MySQL数据库中九种基本对象的定义如下:
1. 数据库(Database):数据库是一组相关数据的集合,用于存储和管理数据。
2. 表(Table):表是数据库中的一个对象,用于存储数据。表由行和列组成,每行表示一个记录,每列表示一个字段。
3. 视图(View):视图是一个虚拟表,它是由一个或多个表的查询结果组成的。视图可以简化复杂的查询操作,提高查询效率。
4. 索引(Index):索引是一种数据结构,用于加快数据的查找速度。索引可以加速数据的检索,但会增加数据的存储空间和维护成本。
5. 存储过程(Stored Procere):存储过程是一组预定义的SQL语句,可以在数据库中存储和重复使用。存储过程可以提高数据库的性能和安全性。
6. 函数(Function):函数是一段可重用的代码,用于执行特定的操作。函数可以接受参数,并返回一个值。
7. 触发器(Trigger):触发器是一种特殊的存储过程,它会在特定的数据库操作(如插入、更新、删除)发生时自动执行。
8. 用户(User):用户是数据库中的一个对象,用于控制数据库的访问权限。用户可以被授予不同的权限,以*对数据库的访问。
9. 权限(Privilege):权限是用户或角色对数据库对象的访问权限。权限可以控制用户或角色对数据库的读、写、修改等操作。

怎样使用Mysql新建触发器

使用Mysql新建触发器的方法:

1、首先,需要确定自己的Mysql数据库的版本,因为my sql数据库是从5.0.2版本才开始支持触发器的。

2、在电脑的dos命令界面中输入 mysql --version,来获取mysql的版本号,注意version的两个横线和之前的mysql是有一个空格的。

3、上一步获取了mysql版本号,就开始建立触发器。采用以视图加代码的方式创建,在数据表中找到要执行删除操作的表,然后右键设计表

4、这样就打开了表的设计页面,可以看到有一个触发器选项卡,点击“触发器”

5、可以看到对应的选项,在名里面添加需要新建的触发器的名字,在触发选项中选择before或者after,然后在插入、更新、删除三个选项中勾选一个。

6、这样们就建立了一个名为“datri”的触发器,在删除操作执行之后触发

7、然后在下面的定义下面的框中输入需要执行的操作。然后点击sql预览,可以看到整个触发器的代码

8、最后就是保存了,由于做的是触发器,保存之后,在执行删除操作时,这个触发器才相当于被执行。

mysql触发器的作用

数据库触发器有下面的作用:
1.安全性。能够基于数据库的值使用户具有操作数据库的某种权利。
  # 能够基于时间*用户的操作,比如不同意下班后和节假日改动数据库数据。
2.审计。能够跟踪用户对数据库的操作。   
  # 审计用户操作数据库的语句。
  # 把用户对数据库的更新写入审计表。
3.实现复杂的数据完整性规则
  # 实现非标准的数据完整性检查和约束。触发器可产生比规则更为复杂的*。与规则不同,触发器能够引用列或数据库对象。比如,触发器可回退不论什么企图吃进超过自己保证金的期货。
  # 提供可变的缺省值。
4.实现复杂的非标准的数据库相关完整性规则。触发器能够对数据库中相关的表进行连环更新。比如,在auths表author_code列上的删除触发器可导致对应删除在其他表中的与之匹配的行。
  # 在改动或删除时级联改动或删除其他表中的与之匹配的行。
  # 在改动或删除时把其他表中的与之匹配的行设成NULL值。
  # 在改动或删除时把其他表中的与之匹配的行级联设成缺省值。
  # 触发器可以拒绝或回退那些破坏相关完整性的变化,取消试图进行数据更新的事务。当插入一个与其主健不匹配的外部键时,这样的触发器会起作用。比如,可以在books.author_code 列上生成一个插入触发器,假设新值与auths.author_code列中的某值不匹配时,插入被回退。
5.同步实时地复制表中的数据。
6.自己主动计算数据值,假设数据的值达到了一定的要求,则进行特定的处理

mysql触发器的作用

数据库触发器有下面的作用:
1.安全性。能够基于数据库的值使用户具有操作数据库的某种权利。
  # 能够基于时间*用户的操作,比如不同意下班后和节假日改动数据库数据。
2.审计。能够跟踪用户对数据库的操作。   
  # 审计用户操作数据库的语句。
  # 把用户对数据库的更新写入审计表。
3.实现复杂的数据完整性规则
  # 实现非标准的数据完整性检查和约束。触发器可产生比规则更为复杂的*。与规则不同,触发器能够引用列或数据库对象。比如,触发器可回退不论什么企图吃进超过自己保证金的期货。
  # 提供可变的缺省值。
4.实现复杂的非标准的数据库相关完整性规则。触发器能够对数据库中相关的表进行连环更新。比如,在auths表author_code列上的删除触发器可导致对应删除在其他表中的与之匹配的行。
  # 在改动或删除时级联改动或删除其他表中的与之匹配的行。
  # 在改动或删除时把其他表中的与之匹配的行设成NULL值。
  # 在改动或删除时把其他表中的与之匹配的行级联设成缺省值。
  # 触发器可以拒绝或回退那些破坏相关完整性的变化,取消试图进行数据更新的事务。当插入一个与其主健不匹配的外部键时,这样的触发器会起作用。比如,可以在books.author_code 列上生成一个插入触发器,假设新值与auths.author_code列中的某值不匹配时,插入被回退。
5.同步实时地复制表中的数据。
6.自己主动计算数据值,假设数据的值达到了一定的要求,则进行特定的处理

如何利用MySQL数据库在插入数据后触发触发器

MySQL数据库支持触发器的功能,触发器是与表操作的对象有关。触发器在满足某种条件时触发,并要执行触发器中定义的SQL语句操作。还有触发器只能创建在真实表上,不能创建在临时表上;触发器的触发事件有before或after,下面利用一个具体实例说明插入数据后触发触发器,如下图所示:

1.第一步,创建数据库表t_class_info,利用创建表语句:

create table t_class_info(

id int(8),

t_no int(10),

t_name varchar(20),

t_addr varchar(60)

);如下图所示:

2.第二步,查看表t_class_info描述,利用命令:

desc t_class_info;如下图所示:

3.第三步,创建触发器info_tri,触发时间是在向表t_class_info插入数据后,触发事件是向表class_info中插入一条记录,如下图所示:

4.第四步,创建数据库表class_info,利用命令:

create table class_info(

id int(8),

t_no int(10),

t_name varchar(20),

t_addr varchar(60)

);如下图所示:

5.第五步,查看class_info数据库表结构,利用命令:

desc class_info;如下图所示:

6.第六步,查看数据库表t_class_info和class_info数据,发现两张没有数据,这时调用插入语句,向数据库表t_class_info里插入一条记录,并查看数据库表class_info是否新增记录,如下图所示:

说明

了解MySQL触发器的触发时间和条件

熟练使用MySQL触发器

mysql触发器简介及如何创建和删除触发器

什么是mysql触发器

需要MySQL 5 对触发器的支持是在MySQL 5中增加的。因此,本章内容适用于MySQL 5或之后的版本。

MySQL语句在需要时被执行,存储过程也是如此。但是,如果你想要某条语句(或某些语句)在事件发生时自动执行,怎么办呢?例如:

1.每当增加一个顾客到某个数据库表时,都检查其电话号码格式是否正确,州的缩写是否为大写;

2.每当订购一个产品时,都从库存数量中减去订购的数量;

3.无论何时删除一行,都在某个存档表中保留一个副本。

所有这些例子的共同之处是它们都需要在某个表发生更改时自动处理。这确切地说就是触发器。触发器是MySQL响应以下任意语句而自动执行的一条MySQL语句(或位于 BEGIN 和 END 语句之间的一组语句):

1.DELETE ;

2.INSERT ;

3.UPDATE 。

其他MySQL语句不支持触发器。

创建mysql触发器

在创建触发器时,需要给出4条信息:

1.唯一的触发器名;

2.触发器关联的表;

3.触发器应该响应的活动( DELETE 、 INSERT 或 UPDATE );

4.触发器何时执行(处理之前或之后)。

保持每个数据库的触发器名唯一 在MySQL 5中,触发器名必须在每个表中唯一,但不是在每个数据库中唯一。这表示同一数据库中的两个表可具有相同名字的触发器。这在其他每个数据库触发器名必须唯一的DBMS中是不允许的,而且以后的MySQL版本很可能会使命名规则更为严格。因此,现在最好是在数据库范围内使用唯一的触发器名。

触发器用 CREATE TRIGGER 语句创建。下面是一个简单的例子:

输入:

create trigger newproct after insert on proucts for each row select 'proct added';分析:CREATE TRIGGER 用来创建名为 newproct 的新触发器。触发器可在一个操作发生之前或之后执行,这里给出了 AFTER INSERT ,所以此触发器将在 INSERT 语句成功执行后执行。这个触发器还指定 FOR EACH ROW ,因此代码对每个插入行执行。在这个例子中,文本 Proct added 将对每个插入的行显示一次。为了测试这个触发器,使用 INSERT 语句添加一行或多行到 procts

中,你将看到对每个成功的插入,显示 Proct added 消息。

仅支持表 只有表才支持触发器,视图不支持(临时表也不支持)。

触发器按每个表每个事件每次地定义,每个表每个事件每次只允许一个触发器。因此,每个表最多支持6个触发器(每条 INSERT 、 UPDATE和 DELETE 的之前和之后)。单一触发器不能与多个事件或多个表关联,所以,如果你需要一个对 INSERT 和 UPDATE 操作执行的触发器,则应该定义

两个触发器。

触发器失败 如果 BEFORE 触发器失败,则MySQL将不执行请求的操作。此外,如果 BEFORE 触发器或语句本身失败,MySQL将不执行 AFTER 触发器(如果有的话)。

删除mysql触发器

现在,删除触发器的语法应该很明显了。为了删除一个触发器,可使用 DROP TRIGGER 语句,如下所示:

输入:

drop trigger newproct ;分析:触发器不能更新或覆盖。为了修改一个触发器,必须先删除它,然后再重新创建。

【相关推荐】

1. mysql免费视频教程

2. MySQL使用字符集和校对顺序使用教程

3. MySQL字符集和校对顺序简介

4. MySQL事务-使用保留点、更改默认的提交行为详解

5. MySQL事务-ROLLBACK,COMMIT用法详解

本文如未解决您的问题请添加抖音号:51dongshi(抖音搜索懂视),直接咨询即可。

上一篇:小孩名字叫什么好

下一篇:

热门图文

  • 设置网页记住用户名密码

    可以在浏览器的设置中将记住账号密码功能打开,这里以谷歌浏览器为例。1、打开浏览器,点击浏览器右上角的更多图标,在展开的菜单中点击“设置”按钮进入设置界面:2、进入设置后,找到“自动填充”分类下的“密码”选项,点击“密码”按钮进入密码界面:3、将“提示保存密码”这一项选中,这时在网站中输入账号密码时浏览器会提示是否记住密码,点击保存即可保存账号密码:

  • Jquery中巧用Ajax的beforeSend方法_jquery

    这次给大家带来beforeSend怎么提高用户体验,beforeSend提高用户体验的注意事项有哪些,下面就是实战案例,一起来看一下。jQuery是经常使用的一个开源js框架,其中的$.ajax请求中有一个beforeSend方法,用于在向服务器发送请求前执行一些动作。$.ajax({ beforeSend:function(){ // handle the beforeSend event }, complete:function(){// handle the complete event

  • js采用concat和sort将N个数组拼接起来的方法_javascript技巧

    一、概述 join( ) ————————数组转字符串 split( ) ———————–字符串转数组 push( ) ———————-将数据添加到数组尾部 pop( ) ———————–数组末尾移除最后一项 shift( ) ———————–删除原数组第一项 unshift( ) ——————–将数据添加到数组头部 sort( ) ————————按升序排列数组项 reverse( ) ——————–反转数组项的顺序 concat( ) ——————–多个数

  • 如何设置窗口颜色和外观

    1.在Windows 搜索框输入[颜色设置]①,然后点选[打开]②。2.在颜色中,您可以选择窗口颜色为浅色、深色或自定义③。您也可以开启或关闭透明效果④。3.在窗口辅色中,您可以选择让Windows自动从我的背景选择辅色⑤,或是自行发挥色彩创意⑥。4.向下滚动后,您可以再选择要显示辅色早宽的区域⑦。(开始菜单、任务茄李栏与控制中心的辅色仅有在色彩设陆纳亮定为深色时才可做勾选)

  • 三星指纹锁如何修改密码

      三星智能锁更换密码步骤如下:x0dx0a  1、按(设定)键(从室内)。x0dx0a  2、短按设定按钮(REG),听到提示音 DING DONG。x0dx0a  3、输入管理员密码(从室外)。x0dx0a  4、按键板亮灯后输入密码并按 * 号按键。x0dx0a  5、输入新密码(从室外) 4-12位,然后按 * 键。x0dx0a  6、再次输入新密码(从室外) 然后按 * 键 完成新密码保存成功。x0dx0a  以上设定只针对三星智能锁正规行货有效,对高仿假货或者水货走私货不能保证有效,

Top