【问题标题】:ERROR 1064 (42000): You have an error in your SQL syntax while trying to create a triggerERROR 1064 (42000):尝试创建触发器时,您的 SQL 语法有错误
【发布时间】:2015-05-21 23:09:22
【问题描述】:
 create
 definer ='root'.'localhost'
 trigger 'maria'.'profesori'
 before insert on 'maria'.'profesori'
 for each row
 begin
 declare mesaj varchar (150);
 if new.nume='Tudor' then
 set mesaj='eroare';
 signal sqlstate'4500' set message_text=mesaj;
 end if;
 end $$;'

但我不断收到此错误消息:

ERROR 1064 (42000):您的 SQL 语法有错误;检查手册 对应于您的 MySQL 服务器版本,以便在 '; 附近使用正确的语法 创造 定义者 ='root'.'localhost' 触发“玛丽亚”。“教授” 在第 1 行插入 o' 之前

【问题讨论】:

  • 我认为问题出在此之前。错误消息在create 之前显示;
  • 你可能忘了把$$放在前面的语句之后。
  • before create I have mysql> use maria Database changed mysql> delimiter $$ mysql> use maria $$ Database changed 是不是少了什么东西?
  • 我不知道该告诉你什么,错误消息显示一个; 字符。我不知道它来自哪里。
  • 你试过删除$$之后的;吗?

标签: mysql


【解决方案1】:

试试:

create
 definer ='root'@'localhost'
 trigger `maria`.`profesori`
 before insert on `maria`.`profesori`
 for each row
 begin
 declare mesaj varchar (150);
 if new.nume='Tudor' then
 set mesaj='eroare';
 signal sqlstate'4500' set message_text=mesaj;
 end if;
 end $$
  1. 定义器的格式应为user@host,而不是user.host
  2. 数据库、触发器和表名应该用反引号引起来,而不是单引号(或者根本不加引号 - 只有当它们是保留字或包含特殊字符时才需要)。
  3. $$ 之后的 ; 可能是个问题。

【讨论】:

    【解决方案2】:

    改变: 信号 sqlstate'4500' 设置 message_text=mesaj; 对此: signal sqlstate'45000' set message_text=mesaj;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-16
      • 2021-05-03
      相关资源
      最近更新 更多