如何在googlecloudsql示例数据库中创建触发器

bxjv4tth  于 2021-06-24  发布在  Mysql
关注(0)|答案(2)|浏览(280)

我在数据库中创建触发器时遇到问题。我有一个mysql第二代示例,在googlecloudsql中有一个数据库(名称:test)。
现在我的数据库中有多个表,我正在尝试使用以下方法在其中一个表中创建触发器:

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服务器版本对应的手册,以获取第10行“”附近要使用的正确语法
有人能帮我吗?此触发器用于防止日期字段重叠。

bsxbgnwa

bsxbgnwa1#

关于google云平台,一件重要的事情是转到示例配置,即“编辑配置”,然后转到“标志”,并确保“log\bin\u trust\u function\u creators”设置为on。这将解决gcp生成触发器的问题,并允许您在mysql workbench ce8.0中创建触发器而不会崩溃。

zzlelutf

zzlelutf2#

我今天也有同样的问题。这仅仅是因为cloudsql示例将每个分号视为语句的结尾,所以我只能假设它每次遇到分号时都会尝试执行。
尝试使用以下方法创建触发器:

/*!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 */

编辑来修正我的语法。少了一个分号。

相关问题