触发器mysql8示例

举报
码乐 发表于 2025/09/14 07:40:13 2025/09/14
【摘要】 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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。