触发器mysql8示例
【摘要】 1 简介以下SQL 代码实际上更接近 SQL Server (T-SQL) 的语法 例如 inserted 伪表、@DepID 变量声明等 。有student 和 deprtment表,在学生表插入一条记录,则相应系表中,系人数加1:设置 触发器create trigger trglnsertStudent on student for insert as declare @DepID i...
1 简介
以下SQL 代码实际上更接近 SQL Server (T-SQL) 的语法 例如 inserted 伪表、@DepID 变量声明等 。
有student 和 deprtment表,在学生表插入一条记录,则相应系表中,系人数加1:设置 触发器
create trigger trglnsertStudent on student for insert
as
declare @DepID int
select @DepID = DepID from inserted
update department set Total = Total + 1
where DepID = @DepID
执行测试:
insert into student values('A00003', 'Mike', '18', '男', 'ShanHai', '80','1')
2 mysql8触发器示例
MySQL 的触发器写法,上例在 mysql 8 的实现
CREATE TRIGGER trgInsertStudent
AFTER INSERT ON student
FOR EACH ROW
BEGIN
UPDATE department
SET Total = Total + 1
WHERE DepID = NEW.DepID;
END;
设有职务工资关系P(职务,最低工资,最高工资),员工关系EMP(员工号,职务)要求其工资值必须在其职务对应的工资范围之内,方法是:
C 建立 EMP上的触发器程序审定该需求。
修改EMP时,将与关系P进行对比,符合则允许执行,否则回滚。
3 数据库安全机制
数据库安全机制中,通过提供存储过程供第三方开发人员调用进行数据更新,从而保证数据库的关系模式不被第三方获取。
解释:
存储过程 Stored Procedure 是在大型数据库系统中,
一组为了完成特定功能的SQL语句集,它存储在数据库,一次编译后永久有效。
用户通过指定存储过程的名字被给出参数(如果该存储过程带有参数——去执行
存储过程是数据库提供的一种对象,通过存储过程定义一段代码,提供给应用程序调用执行。
从安全性角度考虑,更新数据时,通过提供存储过程让第三方调用
将需要更新的数据传入存储过程,从而避免了第三方获取表结构,
保证系统数据安全。
典型的存储过程定义例子:删除指定球员参加的全部比赛
将语句的结束符号从分号;临时改为两个$$可以自定义
mysql>delimiter
mysql>CREATE PROCEDURE delete_matches(IN p_playerno INTERGER)
->BEGIN
->DELETE FROM MATCHES
->WHERE playerno = p_playerno;
->END$$
Query OK. 0 rows affected(0.01sec)
mysql>delimiter;
#将语句的结束符号恢复为分号
定义过程中,使用DELIMITER $$ 命令将语句的结束符号从分号 ;临时改为两个 $$
使得过程体中使用的分号被直接传递到服务器,从而不被客户端(如mysql)解释。
4 小结
在 MySQL 8 中,触发器从文件式管理转向 事务性数据字典管理,执行方式是 事件驱动 + 存储过程解释器(SPI)。
原有例子在 MySQL 8 会逐行触发,在 AFTER INSERT 阶段取 NEW.DepID,然后更新 department.Total,执行过程与原始 INSERT 在同一事务内完成。
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)