sql - 带有 SELECT 语句的 MySQL 触发器

标签 sql mysql triggers

举个例子,假设我有这些表...

人(id,当年)

personteam (id, workyear, team)

一个人在公司工作的每一年都会被分配到一个团队。 'personteam' 存储团队的记录。仅当“person”中的“currentyear”字段等于“personteam”中的“workyear”时,才允许插入“personteam”。

我想在用户插入 PERSON_TEAM 时根据存储在 PERSON 中的内容进行一些检查。所以我正在写一个带有 select 语句的触发器。我不是 100% 确定 MySQL 触发器的语法,所以希望这是有道理的...

CREATE TRIGGER mytesttrigger BEFORE INSERT ON personteam

FOR EACH ROW

SELECT currentyear AS @variablename
FROM person p
WHERE p.id = NEW.id

IF @variablename != NEW.workyear
ERROR 

END

任何人都可以为这样的操作提供修改后的更正语法吗?

谢谢。

(这个例子很简单,所以我可以学习所以请原谅它听起来多么毫无意义)

最佳答案

根据 MySQL 标准,处理此问题的正确方法是使用 SIGNAL 命令将错误返回给客户端。因为这是一个 BEFORE 触发器,触发器中的错误将阻止 mysql 继续并插入行。

但是mysql还不支持SIGNAL,所以我们得想办法引起任意错误。

一种方法是调用一个不存在的过程,as demonstrated here .

一个更好的主意是从此表中删除 INSERT 权限,而是使用存储过程为您处理插入。

关于sql - 带有 SELECT 语句的 MySQL 触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1640217/

相关文章:

sql - 显示不带 order by 子句的 SQL 查询的顺序

c# - .Net Windows 服务抛出 EventType clr20r3 system.data.sqlclient.sql 错误

sql - 将光标位置移动到某个 ID

c# - 在 mysql c# 中插入数据后刷新组合框

php - 通过 PHP mysql PDO 根据下拉列表选择的值更新表

python - 如果 SFTP 服务器触发在上传时自动移动文件,Paramiko put 方法会抛出 "[Errno 2] File not found"

php - 您的 SQL 语法有错误;检查与您的 MySQL 服务器等相对应的手册

mysql - mysql中的物化 View

ms-access - Access 2007 触发器和程序等效项?

sql - SP2-0552 : Bind Variable "NEW" is not declared