如何在Google云sql实例数据库中创建触发器

时间:2018-04-19 19:57:07

标签: mysql google-cloud-sql

我在数据库中创建触发器时出现问题。 我的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行

有没有人可以帮我这个?此触发器用于防止日期字段重叠。

2 个答案:

答案 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)

对于Google Cloud Platform,重要的事情是转到您的实例配置,即“编辑配置”,然后转到“标记”,并确保将“ log_bin_trust_function_creators”设置为on。这将解决GCP触发器中的问题,并允许您在MySQL Workbench CE 8.0中创建触发器而不会崩溃。Image of what Configuration options should be