我有两个表,但这些表是在不同的数据库中。我想要做的是创建一个触发器,当我更新STUDENT表,并且我进入大学表中不存在的大学时,它应该显示错误。但是我没有收到任何错误。以下是我的尝试:
表:
UNIVERSITY - DatabaseA
| Student(PK) | State |
| A | X State |
| B | Y State |
| C | B State |
STUDENT - DatabaseB
| Student_Name (PK) | Grade | University (PK)(FK) |
| James | D | A |
| Andrew | HD | B |
| James | D | C |
触发:
DELIMITER //
CREATE OR REPLACE TRIGGER student_trigger
BEFORE UPDATE ON student
FOR EACH ROW
DECLARE temp_count INTEGER;
BEGIN
SELECT COUNT(*) INTO temp_count
FROM university@DatabaseA u
WHERE u.Student = :OLD.Student;
IF (temp_count < 1)
THEN RAISE_APPLICATION_ERROR(-20101, 'Error:Uni doesnt exist');
END IF;
END;
这项工作和更新成功:
UPDATE student
SET Grade = 'C'
WHERE Student_Name = 'James'
AND University = 'A';
但是当我执行如下所示的更新时,我尝试更新DatabaseA中大学表中不存在大学的位置,我没有收到任何错误,只是让#0; 0行受到影响&#39;:
UPDATE student
SET Grade = 'C'
WHERE Student_Name = 'James'
AND University = 'something_that_doesnt_exist';
如果我输入的大学名称在DatabaseA的UNIVERSITY表中不存在,如何显示错误
答案 0 :(得分:2)
对于符合更新语句条件的表的每一行,执行更新触发器。
在第二种情况下
UPDATE student
SET Grade = 'C'
WHERE Student_Name = 'James'
AND University = 'something_that_doesnt_exist';
没有行受到影响,因此根本不会执行触发器。