我想添加一個觸發器,將我的ride 物體的新狀態插入到ride_history 物體中:
DELIMITER //
CREATE TRIGGER after_updating_changes
AFTER UPDATE ON ride
FOR EACH ROW
BEGIN
IF OLD.status_id <> NEW.status_id THEN
INSERT INTO ride_history(`ride_id`, `status`, `created`)
VALUES(NEW.id, NEW.status_id, NOW());
END IF;
END //
DELIMITER ;
我已經在 phpmyadmin 上測驗過了,執行程序中沒有錯誤,但是當我把它放到我的遷移檔案中并嘗試遷移資料庫時,symfony 回傳這個錯誤:
An exception occurred while executing a query: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL synt
ax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'DELIMITER // CREATE TRIGGER after_
updating_changes AFTER UPDATE ON ride FOR E...' at line 1
所以我對這一切有點迷失,請幫幫我!
uj5u.com熱心網友回復:
DELIMITER 是客戶端命令,不是 SQL 陳述句。所以它在用作 SQL 陳述句時會導致錯誤。
將您的觸發器文本轉換為單陳述句形式,DELIMITER無需命令:
CREATE TRIGGER after_updating_changes
AFTER UPDATE ON ride
FOR EACH ROW
INSERT INTO ride_history(`ride_id`, `status`, `created`)
SELECT NEW.id, NEW.status_id, NOW()
WHERE OLD.status_id <> NEW.status_id;
附注。考慮到如果任何status_id值為 NULL 則不會將任何值保存到歷史表中。因此,如果此列可以為空,則必須相應地調整 WHERE 條件。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/374954.html
