【问题标题】:Please help me to create statement level trigger in mysql请帮我在mysql中创建语句级触发器
【发布时间】:2021-08-08 22:14:33
【问题描述】:
+-------+-------+--------+
| EmpID | EName | Salary |
+-------+-------+--------+
|     1 | Preet | 100000 |
|     2 | Sahil | 150000 |
|     3 | Bill  |  90000 |
|     4 | Lisa  | 120000 |
|     5 | Mukul | 100000 |
+-------+-------+--------+

这是桌子

我试图创建语句级触发器,以便在调用插入或更新操作时将 id=3 员工的薪水更新 +10000。

mysql> create trigger stmt_level
    -> before update on employee
    -> begin
    -> update employee set salary=salary+10000 where EmpID=3;
    -> end;
    -> $$

ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 'begin 附近使用的正确语法 更新员工集工资=工资+10000,其中 EmpID=3; 在第 3 行结束'

【问题讨论】:

  • 您不能对定义触发器的表执行任何操作。因此,请描述任务,而不是您决定用于解决此任务的方式。

标签: mysql triggers mysql-workbench


【解决方案1】:

MySQL 不支持语句级触发器,例如 Oracle

您只能在 MySQL 中创建对更新的每一行执行一次的触发器。必须在BEGIN 之前使用FOR EACH ROW 子句:

create trigger row_level
before update on employee
for each row begin
    ...do something with one updated row...
end

【讨论】:

  • 1) .. on employee .. update employee .. - 不允许 2) 尽管更新了行,但显示的语句尝试更新整个表。
  • 是的,编写的触发器存在逻辑问题,但我的回答仅针对语句级触发器与行级触发器的问题。
  • 随意发布您自己的答案。
  • 我等待 OP 回答我的评论并描述任务。
  • 我已将示例触发器编辑为更通用,并避免不合逻辑的实现。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-25
  • 1970-01-01
  • 1970-01-01
  • 2020-03-10
  • 2013-08-24
  • 2020-11-23
  • 1970-01-01
相关资源
最近更新 更多