对于我们的系统,我们使用多个具有相同结构的数据库。例如,当我们有 1000 个客户时,将有 1000 个数据库。我们选择为每个客户提供自己的数据库,这样我们就可以毫不费力地一次性删除他的所有数据。
现在我必须每年更新几次数据库结构。所以我开始编写一个循环遍历所有模式的存储过程。但我坚持执行动态 USE 语句。
我的代码如下:
DECLARE V_SCHEMA VARCHAR(100);
SET V_SCHEMA = 'SomeSchemaName';
SET @QUERYSTRING = CONCAT('USE ', V_SCHEMA);
PREPARE S FROM @QUERYSTRING;
EXECUTE S;
DEALLOCATE PREPARE S;
当我执行此代码时,我收到一条错误消息Error Code: 1295. This command is not supported in the prepared statement protocol yet
。所以我假设我不能在过程中更改活动数据库。
我已经搜索了互联网,但我发现的唯一一件事是创建每个更改查询的字符串并准备/执行/解除分配它。我希望有一个更好的解决方案。我可以编写一个循环遍历模式并在其上执行 SQL 文件的 shell 脚本,但我更喜欢处理此问题的存储过程。
有谁知道如何使这项工作?
谢谢您的帮助!
编辑:我使用 MySQL 5.6 的最新稳定版本