1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > mysql使用触发器 delete insert update触发器

mysql使用触发器 delete insert update触发器

时间:2024-01-12 21:50:37

相关推荐

mysql使用触发器 delete insert update触发器

mysql5之后的版本才支持触发器。

想要某条语句在事件发生时自动执行,可使用触发器。 例如下面场景:

每当增加一条顾客数据时,都检查其号码格式是否正确。每订购一个产品时,都从库存中减去订购的数量无论何时删除一行,都在某个存档表中留一个副本

支持触发器的语句有:delete、insert、update,或位于begin和end语句之间的一组语句。

创建触发器

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

唯一的触发器名

触发器关联的表

触发器应该响应的活动(delete、insert 或 update)

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

创建触发器语句如下:

CREATE TRIGGER 触发器名 AFTER INSERT ON 表名 FOR EACH ROW SELECT '提示语:插入成功' INTO @ee;

CREATE TRIGGER用来创建触发器,FTER INSERT表示触发器在执行insert语句后执行,**需要执行前触发可以把fter 改成 before ** 。这个触发器还指定 FOR EACH ROW,表示对每个插入行都执行。

用before或after?通常,将before用于数据验证和净化 (确保插入的数据是表所需要的数据)

然后成功执行插入语句后会提示插入成功,然而并不会,因为上面的意思是把“插入成功”存储到变量ee了,select @ee 可以查看。

也许触发器不能向屏幕显示“插入成功”这种文本。

注意:select后面要加 INTO @err,不然mysql5以上版本会报错:Not allowed to return a result set from a trigger,看网上是这样写的。

只有表才支持触发器,一个表最多6个触发器,视图不支持触发器。

单一触发器不能与多个事件或多个表关联,所以,需要对insert和update操作执行触发器时,应该定义两个触发器。

删除触发器:drop trigger 触发器名;

使用触发器

INSERT 触发器

insert触发器代码内,可以用一个名为new的虚拟表,访问被插入的行。new中的值也可以被更新。

reate trigger 触发器名 after insert on 表1 for each row select new.表1中的列名 into @er;**

执行上面的触发器后,每次插入一行数据都会返回new虚拟表指定的列值到变量er中,可以用select @er 查看

DELETE触发器

在delete触发器代码内,可以引用OLD虚拟表,访问被删除的行

OLD中的值全部是只读的,不能更新

下面例子,使用OLD保存将要被删除的行到一个存档表中:

create trigger 触发器名 before delete on 表1 for each row begin insert into 表2(列,列,列)values(old.表1列名,old.表1列名,old.表1列名);end//

删除表1的数据前会把数据存到结构相同的表2中

使用begin end 块的好处是触发器能容纳多条sql语句

** UPDATE 触发器 **

在update触发器代码中,可以引用一个名为old虚拟表访问以前的值,引用new虚拟表访问新更新的值

new中的值可能被更新,old中的值全部是只读的

create trigger 触发器名 before update on 表1 for each row set new.id = upper(new.id);

显然,每次更新一个行时,new.id 中的值(将用来更新表行的值)都用upper(new.id)替换。 也就是,如果new.id = 110,那用update更新表1的id时,将用110这个值更新。

** 触发器的进一步介绍**

触发器可以用来创建审计跟踪,使用触发器,把更改记录到另一个表非常容易

mysql触发器不支持call语句,这表示不能从触发器内调用存储过程,只能把存储过程代码复制到触发器内

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。