如何使用触发器生成字段的值?
How to generate value of a field using trigger?
我需要在 MySQL 中编写触发器以确保每当将新行插入 table 时,其中一个字段的值将由特定值填充,即由其他字段的值组合生成。
如你所见,首先我需要用 - 替换名称字段中的所有空格,然后将其与 - 和 phone 字段的值连接,最后将结果放入昵称字段。
触发器
The following query has failed: "CREATE DEFINER=`root`@`localhost`
TRIGGER `generatenickname` BEFORE INSERT ON `Users`
FOR EACH ROW
DECLARE temp = REPLACE(NEW.name, " ", "-");
SET NEW.nickname = concat(temp + '-' + NEW.phone);"
MySQL said: #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 'DECLARE temp = REPLACE(NEW.name, " ", "-"); SET
NEW.nickname = concat(t' at line 1
如果我用BEGIN和END包围它;并删除 "FOR EACH ROW" 它不显示错误但在昵称字段中输入 0。
您的触发器包含多个语句,因此您需要将它们包含在 BEGIN...END 块中。
参考文档:
http://dev.mysql.com/doc/refman/5.6/en/create-trigger.html
http://dev.mysql.com/doc/refman/5.6/en/trigger-syntax.html
试试这个,它可以解决您的问题。
DELIMITER $$
CREATE TRIGGER `generatenickname` BEFORE INSERT ON `Users`
FOR EACH ROW
BEGIN
SET NEW.NAME = CONCAT(REPLACE(NEW.name, " ", "-") , '-' , NEW.phone);
END;
$$
DELIMITER ;
我需要在 MySQL 中编写触发器以确保每当将新行插入 table 时,其中一个字段的值将由特定值填充,即由其他字段的值组合生成。
如你所见,首先我需要用 - 替换名称字段中的所有空格,然后将其与 - 和 phone 字段的值连接,最后将结果放入昵称字段。
触发器
The following query has failed: "CREATE DEFINER=`root`@`localhost`
TRIGGER `generatenickname` BEFORE INSERT ON `Users`
FOR EACH ROW
DECLARE temp = REPLACE(NEW.name, " ", "-");
SET NEW.nickname = concat(temp + '-' + NEW.phone);"
MySQL said: #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 'DECLARE temp = REPLACE(NEW.name, " ", "-"); SET
NEW.nickname = concat(t' at line 1
如果我用BEGIN和END包围它;并删除 "FOR EACH ROW" 它不显示错误但在昵称字段中输入 0。
您的触发器包含多个语句,因此您需要将它们包含在 BEGIN...END 块中。
参考文档: http://dev.mysql.com/doc/refman/5.6/en/create-trigger.html http://dev.mysql.com/doc/refman/5.6/en/trigger-syntax.html
试试这个,它可以解决您的问题。
DELIMITER $$
CREATE TRIGGER `generatenickname` BEFORE INSERT ON `Users`
FOR EACH ROW
BEGIN
SET NEW.NAME = CONCAT(REPLACE(NEW.name, " ", "-") , '-' , NEW.phone);
END;
$$
DELIMITER ;