我有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
答案 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 ;