在sql触发器中设置和比较变量的正确方法是什么

时间:2016-05-23 15:46:18

标签: mysql

在另一个表上发生插入事件后,使用触发器填充表并且工作正常。但是我注意到触发器仍然会为现有记录插入一个新行。为了解决这个问题,我想再次创建触发器,但这次只有在满足条件时它才会触发...但是之前没有使用过触发器会出现语法错误并且无法识别出错了什么。请看看,帮我解决这个问题

CREATE TRIGGER `students_gen_insert` 
AFTER INSERT ON `students` FOR EACH ROW
BEGIN
INSERT INTO records (student_id, subject_id)
SELECT new.student_id, subjects.subject_id 
       FROM subjects 
       WHERE category = new.class;
END;

目前正在使用MySql 5.6.17版本。

1 个答案:

答案 0 :(得分:0)

从表中选择启用触发器并禁止UPDATE或INSERT(而不是你正在执行的操作)通常不是一个好主意。假设您正在尝试获取刚刚插入的行的值,那么您拥有的第一个SET ... SELECT是不必要的;只需使用NEW.fieldname来获取插入行的字段。

第二个SET ... SELECT和以下条件有点令人困惑。如果保持参照完整性,我认为记录表不可能在触发器执行时引用学生表的特定student_id。也许这是为了避免触发器之前的代码重复插入?如果是这样,那么发布它可能会有所帮助,因此我们可以确定冗余插入的实际来源。