您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

Mysql中的触发器的语法是什么

2024/6/10 21:52:26发布45次查看
1.定义:mysql 中嵌入的一段程序包括触发器和存储过程,二者具有相似之处。触发器是由事件来触发某个操作。当数据库执行这些事件时,就会激活触发器来执行相应的操作。mysql中,触发条件包括update、insert和delete操作。
在mysql中,目前只有update,insert,和delete这三种操作,才会触发触发器,其他操作都不支持触发器。这和oracle中的触发器有很大的区别,要注意区分。
触发器的每个表每次事件,都只允许一个触发器。因此,每个表最多值允许有6个触发器。假如一个表需要对insert和delete两种事件进行触发,则需要分别创建两个触发器。
只有表才支持触发器,视图和临时表不支持。
2.语法:create trigger trigger_namebefore/after update/insert/delete on table_name for each row#触发器主体[begin]sql操作[end];
创建触发器:和创建存储过程是一样,用的都是create 语句,但要注意,这里没有 or replace。
trigger_name:触发器名称。在mysql中,要保证每个表中的触发器是唯一的,每一个数据库内的触发器可以不唯一,这就说明了一个数据库内的两个表可以有相同的触发器。这种行为在其他的数据库内是不被允许的。为了保持格式的一致性,应尽量确保trigger_name的独一无二性。
before/after:触发器被触发的时刻。如果你想让触发器在事件触发之前执行,可以使用“before”,如果想在事件触发之后执行,可以使用“after”。
操作:update/insert/delete,会触发相应的事件和条件。mysql只允许这三种ddl操作支持触发器,其他操作均不被支持。
for each row:受触发事件影响的每一行都要激活触发器的动作。在mysql中,行触发是指foe each row不能省略,不支持语句触发。
触发器主体:既可以是单独的一条sql语句,也可以是由begin...end组成的复杂结构块。
# 创建一个触发器t1,在对表customer做插入操作时,就会触发t1,之后会在日志表note中插入一条数据create trigger t1after insert on customerfor each row # 触发器主体insert into note(日期,目标,操作) values(now(),'customer','insert');
3.删除触发器和删除表和存储过程类似,都是使用drop语句来删除触发器。
#删除触发器t1drop trigger if exists t1;
触发器不能够更新和修改,想要修改一个触发器的内容,只能先将触发器删除,在创建一个新的触发器。
4.查询触发器#在已知数据库内,查询触发器show triggers;select * from information_schema.triggers where trigger_name = '触发器名'#查询所有的触发器select * from information_schema.triggers(where trigger_schema = '数据库名')
5.触发器类型old和new的使用触发器在ddl操作之前或者之后触发,总会对目标表做出一定的改动,有时我们需要知道目标表改变前后的值,这就用到了old和new的用法。
顾名思义,old就是改变之前的值,是update之前或者是要被delete或者已经被delete的值。
而new,则是update之后的新值,即将insert或者已经insert的值。
具体实例:
#创建customer表create table `customer` (`cust_id` int(11) not null auto_increment,`cust_name` varchar(10) not null,`cust_tel` varchar(10) default null,primary key (`cust_id`)) engine=innodb default charset=utf8;#向表中插入数据#创建一个update触发器create trigger t2after update on customerfor each row #old和new的使用方法:old.columnname/new.columnname(列名)#将更新前后的值,赋值给两个变量select old.cust_id,new.cust_id into @old_id,@new_id;#触发触发器t2update customer set cust_id = '10000' where cust_name = 'aaa';#查询old和newselect @old_id,@new_id;
以上就是mysql中的触发器的语法是什么的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product