我正在尝试为 MySQL 5.1 创建一个将数据库名称作为参数并在该数据库内发出 MULTI DELETE 的过程。我遇到了两个我不确定如何解决的问题:
USE
不能在准备好的语句中使用。当我尝试时,我得到“准备好的语句协议尚不支持此命令”。- 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 ;
同样,这会导致“准备好的语句协议尚不支持此命令”。
另一个目标是将其保留在 MySQL 中——我宁愿不使用连接到 MySQL 的脚本语言,而是只使用一些我可以从客户端 CLI 调用的 MySQL 过程。但是,如果在 MySQL 中可能的话,我不反对使用其他语言的过程(就像您可以在 PostgreSQL 中那样)。