我开始学习SQL,并建立了一个房屋数据库,其中有一个房子,房间,走廊等的桌子。我在House中有一个名为NumberOfRooms的列,以及一个名为HouseName的列。
我正在尝试触发,以便当房间被添加到房屋时,House属性“NumberOfRooms”会递增。
这是我正在尝试的查询:
CREATE TRIGGER UpdateNoRooms AFTER INSERT AS
UPDATE Houses SET Houses.NumberOfRooms = SELECT COUNT(Room)
FROM Rooms
WHERE Rooms.HouseName = Houses.Name;
,但它不起作用。
这是我收到的错误消息:
错误1064(42000):您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在第1行的“
AS UPDATE Houses SET Houses.NumberOfRooms = SELECT COUNT(Room) FROM Rooms WHERE
”附近使用正确的语法
关于如何解决此问题的任何想法?提前谢谢
答案 0 :(得分:1)
这是一个快速版本 - 你有非规范化 - 这不是一个好主意。相反,应留出房间数来查询时间。
CREATE TRIGGER UpdateNoRooms AFTER INSERT AS
BEGIN
UPDATE Houses h
SET h.NumberOfRooms = h.NumberofRooms+1 WHERE :new.HouseName = h.Name;
END;
答案 1 :(得分:1)
请参阅MySQL documentation中的语法图。您错过了命令的几个必需部分:
您需要ON tablename
告诉它应该将触发器附加到哪个表格。
在触发器体之前需要FOR EACH ROW
。
您不需要计算房间数。添加房间只会使房间数增加1。
所以它应该是:
CREATR TRIGGER UpdateNoRooms
AFTER INSERT ON Rooms
FOR EACH ROW
UPDATE Houses AS h
SET h.NumberOfRooms = h.NumberOfRooms + 1
WHERE h.HouseName = NEW.HouseName