我尝试使用用户定义的变量创建一个干净的触发器,所以这是我的代码:
SET @target_bdd = 'trigger_second';
SET @trigger_name = 'account_copy';
SET @table_name = 'account';
SET @primary_key = 'id';
DROP TRIGGER IF EXISTS `@trigger_name`;
DELIMITER $$
CREATE TRIGGER `@trigger_name` AFTER INSERT
ON `@table_name`
FOR EACH ROW BEGIN
INSERT INTO `@target_bdd`.`@table_name`
SELECT * FROM `@table_name`
WHERE `@primary_key` = NEW.`@primary_key`;
END $$
DELIMITER ;
但我有这个错误:
ERROR 1064 (42000): 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 '@table_name
FOR EACH ROW BEGIN INSERT INTO `@target_bdd`.`@table_name` SELECT * ' at line 2
为什么?我尝试了其他引号('“),但也有同样的错误:(
没有引用:
错误1064(42000):您的SQL语法有错误;检查 手册,对应右边的MySQL服务器版本 语法在'@trigger_name附近使用@TER_name FOR FORACH后插入 ROW BEGIN INSERT INTO @target'在第1行
我尝试使用SQL指令声明用户定义的变量,如:
SET @sql = CONCAT(
'CREATE TRIGGER ',
@trigger_name,
' AFTER INSERT ON ',
@table_name,
' FOR EACH ROW BEGIN INSERT INTO ',
@target_bdd,
'.',
@table_name,
' SELECT * FROM ',
@table_name,
' WHERE ',
@primary_key,
' = NEW.',
@primary_key,
'; END'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
但是我有一个错误1295(See in MySQL Documentation)
答案 0 :(得分:1)
在纯SQL中,不能将用户变量用于表名,列等。您也不能在预准备语句中创建触发器(就像错误告诉您的那样)。似乎目前没有办法做你想做的事。
答案 1 :(得分:0)
我必须说我之前从未使用过用户定义的变量,但在测试中我发现你不应该引用它们!
当你引用`@vars`时,mysql将查找文字'@vars'
字段,而不是存储在其中的值。