【发布时间】:2021-04-10 04:11:35
【问题描述】:
想知道是否有人可以提供帮助。
我正在使用 MySQL。我的数据库中有两个表,locker 和 locker_possession。 locker_possession 是学生表的链接表,该表记录哪些学生拥有哪些储物柜,locker 表是每个储物柜的信息。在locker 中有一个布尔列来说明locker 是否被采用。为此,我尝试创建一个触发器,以便当locker table 中的locker_id 在locker_possession 中被引用时,locker_taken 布尔值将变为真。触发器被架构接受,我可以将数据插入locker。但是,插入locker_possesion 会出现以下错误:
Error Code: 1054. Unknown column 'locker.locker_id' in 'where clause'
这些是 locker 和 locker_possession 的创建脚本:
CREATE TABLE locker (
locker_id VARCHAR(7) NOT NULL,
locker_taken BOOL NOT NULL,
deposit_paid BOOL NOT NULL,
PRIMARY KEY (locker_id)
);
CREATE TABLE locker_possession (
locker_id VARCHAR(7) NOT NULL,
owner_id VARCHAR(7) NOT NULL,
FOREIGN KEY (locker_id) REFERENCES locker(locker_id),
FOREIGN KEY (owner_id) REFERENCES student(student_id)
);
这些是插入脚本:
INSERT INTO `locker` (`locker_id`,`locker_taken`,`deposit_paid`) VALUES
("LK1","0","0"),
("LK2","0","0"),
("LK3","0","0"),
("LK4","0","0"),
("LK5","0","0"),
("LK6","0","0"),
("LK7","0","0"),
("LK8","0","0"),
("LK9","0","0"),
("LK10","0","0");
INSERT INTO `locker_possession` (`locker_id`,`owner_id`) VALUES
("LK2","P1"),
("LK4","P2"),
("LK5","P3"),
("LK7","P4"),
("LK8","P5");
这是触发器:
CREATE TRIGGER locker_availability_update
AFTER INSERT
ON locker_possession
FOR EACH ROW
UPDATE locker
BEGIN
SET locker_taken = 1 WHERE locker.locker_id = NEW.locker_id;
如果有人有任何想法或可以以任何方式提供帮助,将不胜感激。
提前致谢。
【问题讨论】:
-
奇怪的语法 - 删除 begin 语句。
-
如果从
WHERE子句中删除locker会发生什么?类似WHERE locker_id = NEW.locker_id -
@P.Salmon 很不错。谢谢。
标签: mysql sql database triggers