【问题标题】:MySQL error #1054 "unknown column in field list" with trigger带有触发器的 MySQL 错误 #1054“字段列表中的未知列”
【发布时间】:2021-04-10 04:11:35
【问题描述】:

想知道是否有人可以提供帮助。

我正在使用 MySQL。我的数据库中有两个表,lockerlocker_possessionlocker_possession 是学生表的链接表,该表记录哪些学生拥有哪些储物柜,locker 表是每个储物柜的信息。在locker 中有一个布尔列来说明locker 是否被采用。为此,我尝试创建一个触发器,以便当locker table 中的locker_idlocker_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


【解决方案1】:

BEGIN 放错了位置,应该有一个END。在 MySQL 中,我建议:

DELIMITER $$

CREATE TRIGGER locker_availability_update
    AFTER INSERT ON locker_possession FOR EACH ROW 
BEGIN
    UPDATE locker
        SET locker_taken = 1
        WHERE locker.locker_id = NEW.locker_id;
END; $$

【讨论】:

    猜你喜欢
    • 2013-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-23
    • 1970-01-01
    相关资源
    最近更新 更多