gpt4 book ai didi

mysql - 在多表删除上使用动态数据库名称的过程

转载 作者:行者123 更新时间:2023-11-29 13:56:38 26 4
gpt4 key购买 nike

我正在尝试为 MySQL 5.1 创建一个过程,该过程将采用数据库名称作为参数,并在该数据库内发出 MULTI DELETE。我遇到了两个问题,我不知道如何解决:

  • USE 不能在准备好的语句中使用。当我尝试时,我得到“准备好的语句协议(protocol)尚不支持此命令”。
  • MULTI DELETE 无法删除不同数据库中的表。当我尝试时,我得到“MULTI DELETE 中未知的表 'x'”。

代码示例如下:

DELIMITER $$
CREATE PROCEDURE multi_test (
IN dbname VARCHAR(20)
)
BEGIN
SET @us = CONCAT('USE ', dbname, ';');
PREPARE ustmt FROM @us;
EXECUTE ustmt;
DEALLOCATE PREPARE ustmt;
SET @s = CONCAT('DELETE t FROM ', dbname, '.t as t INNER JOIN ', dbname, '.t2 as t2 IN t.f_id = t2.id');
PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END $$
DELIMITER ;

同样,这会导致“准备好的语句协议(protocol)尚不支持此命令”。

另一个目标是将其保留在 MySQL 中 - 我宁愿不使用连接到 MySQL 的脚本语言,而只是使用一些可以从客户端 CLI 调用的 MySQL 过程。不过,如果在 MySQL 中可行的话,我并不反对使用其他语言的过程(就像您可以在 PostgreSQL 中所做的那样)。

最佳答案

在尝试使用 MULTI DELETE 时,我似乎需要使用数据库名称和表别名。

DELETE dbname.talias FROM dbname.t as talias INNER JOIN dbname.t2 as t2 ON talias.f_id = t2.id

我相信我已经尝试过了,但失败了,但现在看来它正在工作:-/

关于mysql - 在多表删除上使用动态数据库名称的过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15749975/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com