mysql触发器与sql server触发器对比. |
您所在的位置:网站首页 › te的拼读 › mysql触发器与sql server触发器对比. |
文章目录
前言一、sql server触发器示例二、mysql触发器对应的示例
前言
本人呢,由于懒得下载sql server.本想用mysql一直代替学校老师教的sql server.一直用的风生水起,洋洋得意.直到那天…遇到了触发器!!!什么?这玩意这么恐怖?那是,这玩意让我用mysql花了3天…这里多谢@noisyfox 网友的指点.在这里我应该叫他前辈! 提示:以下是本篇文章正文内容,下面案例可供参考 题目要求:创建触发器要求在插入和更新学生年龄时检查age是否在15到60之间,如不在15到60,则弹出“年龄不合法”提示信息; 一、sql server触发器示例sql server临时表 create trigger stu_insert -- 创建名称为stu_insert的trigger on stu -- trigger作用的table是stu for insert -- trigger在插入操作时生效 (标记x) as declare @age char(10) -- 声明@age变量 select @age=age from inserted --sql server触发器中会根据 x操作 生成一个对应临时表inserted 可以看作是stu的复制表.但有生命周期. if (@age60) begin -- if的语句体 print '年龄不合法' rollback TRANSACTION end else print '年龄合法插入成功' Drop trigger stu_insert; -- 摧毁该trigger commit; -- 备份插入操作. create trigger stu_delete on stu for delete as insert into stu1(sno,name,age,class) select sno,name,age,class from deleted if @@error!=0 begin print '备份失败' rollback end else print '备份成功'
关于mysql不支持显示或隐式的提交 mysql如何避免显示或隐式的提交 for each row解释 delimiter $$ -- 自定义结束符号 create trigger stu_insert -- 创建名称为stu_insert的trigger before insert -- trigger触发时机是insert操作提交数据之前 on stu -- trigger作用的table是stu for EACH ROW -- 行级触发器,mysql必须写 BEGIN -- 开始事物语句 # select age from stu where age=new.age into @age; --这条可忽略.有兴趣可验证.他相当于补救增添一个唯一约束. if (new.age 60) then # if-then-else-end if; 条件判断语句 -- mysql不支持显示或隐式的提交,因此不允许回滚.我们这个操作是抛出异常 并打印消息提示.抛出异常会自动回滚. SIGNAL SQLSTATE '02000' SET MESSAGE_TEXT = 'Warning: 年龄不合法!'; else select '年龄合法插入成功' into @str2; -- select 打印提示消息 语句必须放入容器中. end if; -- if条件结束的标志 end --事务结束的标志 $$ --自定义触发器结束 delimiter ; commit; -- 由于我设置了手动提交,因此需要这一句. Drop trigger stu_insert; -- 摧毁该trigger commit; -- 备份插入操作 create trigger stu_delete after delete on stu for EACH ROW BEGIN insert into stu1(sno, name, age, class) values(now(),now(),now(),now()); if @error != 0 then SIGNAL SQLSTATE '02000' SET MESSAGE_TEXT = 'Warning: 备份失败!'; else select '备份成功' into @str2; end if; end; commit;
插入前 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |