Mysql 学习笔记

Mysql 学习笔记(五)

触发器(Trigger)

➢ 它是个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。 触发器可以从 DBA_TRIGGERS , USER_TRIGGERS 数据字典中查到。

➢ 为什么要使用触发器:

✓ 可以使用它来检查或预防坏的数据进入数据库。

✓ 可以改变或取消 INSERT、UPDATE、以及 DELETE 语句。

✓ 可以在一个会话中监视数据改变的动作。

(1)创建触发器

CREATE [DEFINER = { user | CURRENT_USER }] TRIGGER <触发器名称> { BEFORE | AFTER } { INSERT | UPDATE | DELETE } ON <表名称> FOR EACH ROW <触发的 SQL 语句>

注:

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

✓ 触发程序的动作时间:BEFORE AFTER. 可以设置为事件发生前或后。

✓ 事件:指明了激活触发程序的语句的类型。可以是下述值之一: ✓ INSERT:将新行插入表时激活触发程序,例如,通过 INSERT、LOAD DATA 和 REPLACE 语句。 ✓ UPDATE:更改某一行时激活触发程序,例如,通过 UPDATE 语句。 ✓ DELETE:从表中删除某一行时激活触发程序,例如,通过 DELETE 和 REPLACE 语句。

✓ 表:触发器是属于某一个表的:当在这个表上执行插入、更新或删除操作的时候就导致触发 器的激活。我们不能给同一张表的同一个事件安排两个触发器,而且必须引用永久性表,不 能将触发程序与 TEMPORARY 表或视图关联起来。

✓ 触发间隔:FOR EACH ROW 通知触发器每隔一行执行一次动作,而不是对整个表执行一次。

✓ 关于旧的和新创建的列的标识

在触发器的 SQL 语句中,你可以关联表中的任意列。但你不能仅使用列的名称去标识,那会使系统混淆,因为那里可能会有列的新名(这可能正是你要修改的,你的动作可能正是要 修改列名),还有列的旧名存在。因此你必须用这样的语法来标识: "NEW . column_name" 或者"OLD . column_name".这样在技术上处理(NEW | OLD . column_name)新和旧的列名属 于创建了过渡变量("transition variables")。 对于 INSERT 语句,只有 NEW 是合法的;对于 DELETE 语句,只有 OLD 才合法;而 UPDATE 语句可以在和 NEW 以及 OLD 同时使用。下面是一个 UPDATE 中同时使用 NEW 和 OLD 的例子。

CREATE TRIGGER t21_au BEFORE UPDATE ON t22 FOR EACH ROW

BEGIN

SET @old = OLD . s1;

SET @new = NEW.s1;

END;

✓ 触发的 SQL 语句:是当触发程序激活时执行的语句。如果你打算执行多个语句,可使用 BEGIN ... END 复合语句结构。这样,就能使用存储子程序中允许的相同语句。

例子:create  trigger tri_student before insert on student for each row insert into sc(sno) value(NEW.sno);

(2)查询触发器

SHOW TRIGGERS [{FROM | IN} db_name] [LIKE 'pattern' | WHERE expr]

例子:show triggers;

(3)删除触发器

DROP TRIGGER [schema_name.]trigger_name

说明: 方案名称(schema_name)是可选的。如果省略了 schema(方案),将从当前方案中 舍弃触发程序。DROP TRIGGER 语句需要 SUPER 权限。

例子:drop trigger tri_student;

触发器--1
触发器--2
触发器--3
触发器--4
触发器--5

(4)创建触发器例子

delimiter //

注:在命令提示符下输入delimiter // 这样是用//替换换行符,这样可避免点击换行键时执行程序。

创建两张表student(学生表),sc(成绩表)

create table student (sno varchar(10) primary key, sname varchar(20), sage int(2), ssex varchar(5) );

create table sc ( sno varchar(10), cno varchar(10), score double, constraint pk_sc primary key (sno,cno) );

4.1)插入时触发

create  trigger tri_insert before insert on student for each row

begin

insert into sc(sno) value(NEW.sno);

end;//

触发器--6  插入时触发

4.2) 更新时触发

create trigger tri_update after update on student for each row

begin

update sc set sno=new.sno where sno=old.sno;

end;//

触发器--7 更新时触发
触发器--8 更新时触发
触发器--9 更新时触发

4.3) 删除时触发

create trigger tri_delete after delete on student for each row

begin

delete from sc where sno=old.sno;

end; //

触发器--10 删除时触发
触发器--11 删除时触发
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,902评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,037评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,978评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,867评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,763评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,104评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,565评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,236评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,379评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,313评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,363评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,034评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,637评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,719评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,952评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,371评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,948评论 2 341

推荐阅读更多精彩内容

  • 触发器概念 什么是触发器 触发器是一种与表操作有关的数据库对象,当触发器所在表上发生指定事件时,将调用该对象,即表...
    maxwellyue阅读 1,163评论 0 11
  • MySQL 主要介绍了数据表记录查询和多表记录查询基本方法。谢阅! 一.MySQL概述 1.数据库概述 数据库就是...
    Vincilovfang阅读 296评论 0 2
  • Mysql 学习笔记(三) 索引(index) (1)索引是一个单独的、物理的数据库结构,它是某个表中一列或若干列...
    二十四小时爱你阅读 268评论 0 1
  • 《春天的感觉》 春天给人的感觉,大概总是美好的吧。夏的日头太毒,秋过于萧索,冬又寒风凛冽。温和如春,当然是个惹人...
    林然小同学w阅读 1,251评论 1 5
  • 闺蜜结婚时有几个朋友没去参加,事后便寻了一个黄道吉日请大家一起聚一聚。既然是饭局,人多了,故事自然就多了。 一共1...
    大唐坐在白日梦上阅读 191评论 0 1