ai didi

mysql - 在 "INSERT ON"子句中使用用户变量

转载 作者:可可西里 更新时间:2023-11-01 07:41:59 24 4
gpt4 key购买 nike

我尝试使用用户定义的变量创建一个干净的触发器,所以这是我的代码:


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

为什么?我试过用其他引号 ('") 但有同样的错误:(

没有引号:

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 '@trigger_name AFTER INSERT ON @table_name FOR EACH ROW BEGIN INSERT INTO @target' at line 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 )

最佳答案

您不能在纯 SQL 中将用户变量用于表名、列等。您也不能在准备好的语句中创建触发器(就像错误告诉您的那样)。似乎目前没有办法做你想做的事。

关于mysql - 在 "INSERT ON"子句中使用用户变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6826923/

24 4 0
文章推荐: php - Mysql 到 Php,德语、瑞典语、冰岛语等字母的问题
文章推荐: AndroidStudio 无法同步 Gradle 文件
文章推荐: android - React Native - Android 模拟器的文本转换问题
文章推荐: java - ViewPager 没有从服务器获取图像
可可西里
个人简介

我是一名优秀的程序员,十分优秀!

滴滴打车优惠券免费领取
滴滴打车优惠券
全站热门文章
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com