创建触发器mysql错误

时间:2014-01-07 10:05:03

标签: mysql triggers phpmyadmin

嗨,我正在尝试创建触发器

我有2张桌子

Client_Deatils
C_ID(varchar)

Client_Seq
C_ID(int)自动增量

当一个值添加到Client_Details时,C_ID的feild值必须为'RMP0000001' 以下是我正在使用的内容

CREATE TRIGGER `RMP_ID` BEFORE INSERT ON `Client_Details`
FOR EACH ROW BEGIN
INSERT INTO Client_Seq VALUES (NULL);
SET NEW.C_ID = CONCAT('RMP', LPAD(LAST_INSERT_ID(), 7, '0'));  

我有这个错误

Error
SQL query:

CREATE TRIGGER `RMP_ID` BEFORE INSERT ON  `Client_Details` 
FOR EACH
ROW BEGIN 
INSERT INTO Client_Seq
VALUES (

NULL
);

MySQL said: Documentation
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your 
MySQL server version for the right syntax to use near '' at line 3 

1 个答案:

答案 0 :(得分:0)

更新1

  

这是它出现的错误。 #1235 - 此版本的MySQL尚不支持“具有相同操作时间和事件的多个触发器” - webdevelopersana

您似乎已经在同一个表上有一个名为RMP_ID的触发器并且具有相同的BEFORE事件。如果你想修改或重新定义它,首先必须删除

DROP TRIGGER IF EXISTS `RMP_ID`;

然后,您可以使用对其功能所做的更改来创建触发器。

DROP TRIGGER IF EXISTS `RMP_ID`;
DELIMITER //
CREATE TRIGGER `RMP_ID` BEFORE INSERT ON `Client_Details`
  ...
  ...

SQL存储过程或触发器语句不是单个语句。它们包含不同的代码块,如声明 body 。并且每个此类声明和正文中的语句必须以默认分隔符;(分号)终止。但是除非我们指定,否则SQL引擎不会接受每个这样的过程语句作为块语句。

指定新DELIMITER值的标准语法。您可以使用//$$等内容。您需要在程序语句之外声明这一点。这是你缺少的,因此是错误... at line 3

您还需要END程序块。您在代码中遗漏了它。

您可以尝试以下方式:

DELIMITER //
CREATE TRIGGER `RMP_ID` BEFORE INSERT ON `Client_Details`
  FOR EACH ROW BEGIN
    INSERT INTO Client_Seq VALUES (NULL);
    SET NEW.C_ID = CONCAT('RMP', LPAD(LAST_INSERT_ID(), 7, '0'));  
  END;
//

DELIMITER ;

请参阅 MySQL: CREATE TRIGGER Syntax