试题题干
有两个表R(A)和S(B),R(A)={1,3},S(B)={5,6}。定义如下触发器:
CREATE TRIGGER my_tri AFTER INSERT ON R
FOR EACH ROW INSERT INTO S VALUES (NEW.A+2)
当执行完 INSERT INTO R( SELECT*FROM S)之后,分别写出R和S的结果。
参考答案
试题解析
在MySQL中,可以使用 CREATE TRIGGER 语句创建触发器,其常用的语法格式是:
CREATE TRIGGER trigger_name trigger_time trigger_event
ON tbl_name FOR EACH ROW trigger_body
(1) 语法项“trigger_name”用于指定触发器的名称,即本题的my_tri。
(2) 语法项“trigger_time”用于指定触发器被触发的时刻,它有两个选项,即关键字“BEFORE”和关键字“AFTER”,用于表示触发器是在激活它的语句之前或之后触发。即本题的AFTER。
(3) 语法项“trigger_event”用于指定触发事件,即本题的INSERT。
(4) 语法项“tbl_name”用于指定与触发器相关联的表名,即本题的R,
(5) 关键字“FOR EACH ROW”用于指定对于受触发事件影响的每一行都要激活触发器的动作。
(6) 语法项“trigger_body”用于指定触发器动作主体。即本题的INSERT INTO S VALUES (NEW.A+2),表示向S表中插入一条数据(NEW.A+2)。需要注意:在INSERT触发器代码内,可引用一个名为NEW(不区分大小写)的虚拟表,来访问被插入的行。
故本题的触发器表示:每次向R表插入一条S表的数据时,也向S表中插入一条数据(NEW.A+2),该数据是新插入的S表数据本身+2。故最终结果是R(A)={1,3,5,6},S(B)={5,6,7,8}