SQL return 语法错误或访问冲突:1064 在使用 symfony 迁移期间
SQL return a Syntax error or access violation: 1064 during migration with symfony
我想添加一个触发器,将我的乘车实体的新状态插入到 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 returns 这个错误:
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
所以我对这一切有点迷茫,请帮助我!
DELIMITER 是客户端命令,不是 SQL 语句。因此在使用 as 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;
PS。请注意,如果任何 status_id
值为 NULL,则 none 将保存到历史记录 table 中。因此,如果此列可为空,则必须相应地调整 WHERE 条件。
我想添加一个触发器,将我的乘车实体的新状态插入到 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 returns 这个错误:
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
所以我对这一切有点迷茫,请帮助我!
DELIMITER 是客户端命令,不是 SQL 语句。因此在使用 as 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;
PS。请注意,如果任何 status_id
值为 NULL,则 none 将保存到历史记录 table 中。因此,如果此列可为空,则必须相应地调整 WHERE 条件。