MySQL 5.7添加DELETE触发器报1064语法错误问题求助
问题原因与解决方案
你遇到的1064语法错误核心是MySQL语句分隔符冲突:
MySQL默认以分号;作为单条SQL的结束标识,而触发器内部的INSERT语句末尾已经使用了分号,数据库执行到第一个分号时就会判定当前CREATE TRIGGER语句已经结束,剩余代码会被识别为非法语法,因此抛出near ''的报错。你之前的新增触发器能正常运行,大概率是创建时刚好已经调整过分隔符,或是执行环境自动做了兼容处理。
解决方法就是创建触发器前临时修改分隔符,创建完成后再改回默认值,修正后的代码如下:
-- 临时修改语句分隔符为// DELIMITER // CREATE TRIGGER delete_przejazdy_logger AFTER DELETE ON przejazdy FOR EACH ROW BEGIN INSERT INTO zmiany (rodzaj, data_modyfikaji, uzytkownik, id_pasazera, imie_nazwisko, tel_1, tel_2, tel_3, email, id_odbiorcy, imie_nazwisko2, tel2_1, tel2_2, dokument2, id_adres_z, kraj_z, miejscowosc_z, adres_z, kod_z, tel_stac_z, id_adres_do, kraj_do, miejscowosc_do, adres_do, kod_do, tel_stac_do, `data`, osob, fotelik, detale, ilosc_bagazu) (SELECT 1, CURRENT_DATE, SUBSTRING_INDEX(USER(), '@', 1), pasazerowie.id AS id_pasazera, pasazerowie.imie_nazwisko, pasazerowie.tel_1, pasazerowie.tel_2, pasazerowie.tel_3, pasazerowie.email, odbiorcy.id AS id_odbiorcy, odbiorcy.imie_nazwisko AS imie_nazwisko2, odbiorcy.tel_1 AS tel2_1, odbiorcy.tel_2 AS tel2_2, odbiorcy.dokument AS dokument2, adresy_z.id AS id_adres_z, adresy_z.kraj AS kraj_z, adresy_z.miejscowosc AS miejscowosc_z, adresy_z.adres AS adres_z, adresy_z.kod AS kod_z, adresy_z.tel_stac AS tel_stac_z, adresy_do.id AS id_adres_do, adresy_do.kraj AS kraj_do, adresy_do.miejscowosc AS miejscowosc_do, adresy_do.adres AS adres_do, adresy_do.kod AS kod_do, adresy_do.tel_stac AS tel_stac_do, OLD.`data`, OLD.osob, OLD.fotelik, OLD.detale, OLD.ilosc_bagazu FROM pasazerowie LEFT JOIN pasazerowie odbiorcy ON OLD.id_odbiorcy = odbiorcy.id JOIN adresy adresy_do ON OLD.id_adres_do = adresy_do.id JOIN adresy adresy_z ON OLD.id_adres_z = adresy_z.id WHERE pasazerowie.id = OLD.id_pasazera); END // -- 恢复为默认分隔符 DELIMITER ;
额外提醒:
data属于MySQL的保留关键字,你用它作为字段名,最好统一用反引号`包裹,避免后续出现其他隐式语法问题。
内容的提问来源于stack exchange,提问作者Anthony
相关产品推荐
相关产品推荐

