我在数据库中创建触发器时出现问题。 我的google云sql中有一个带有数据库(名称:test)的MySQL第二代实例。
现在我的数据库中有多个表,我试图在其中一个表中创建一个触发器:
CREATE TRIGGER date_overlap_insert_start_date
BEFORE INSERT ON driver_operation
FOR EACH ROW
BEGIN
if exists(
select 1
from driver_operation
where nif = NEW.nif
and (NEW.start_date > start_Date and NEW.start_date < end_Date)) then
signal sqlstate '45000' SET MESSAGE_TEXT = 'Overlaps with existing data';
end if;
END;
我得到的错误是这样的: 错误代码:1064。您的SQL语法有错误;查看与您的MySQL服务器版本相对应的手册,以获得在&#39;&#39;附近使用的正确语法。在第10行
有没有人可以帮我这个?此触发器用于防止日期字段重叠。
答案 0 :(得分:0)
今天我有同样的问题。这只是因为云sql实例将每个半冒号视为语句的结尾,所以我只能假设它每次遇到一个时都会尝试执行。
尝试使用以下方法创建触发器:
/*!50003 CREATE*/ /*!50003 TRIGGER date_overlap_insert_start_date
BEFORE INSERT ON driver_operation
FOR EACH ROW
BEGIN
if exists(
select 1
from driver_operation
where nif = NEW.nif
and (NEW.start_date > start_Date and NEW.start_date < end_Date))
then
signal sqlstate '45000' SET MESSAGE_TEXT = 'Overlaps with
existing data';
end if;
END */
编辑以修复我的语法。缺少分号。
答案 1 :(得分:0)