mysql - 在 MySQL 脚本中设置当前数据库

标签 mysql database

我有一个 MySQL 脚本文件,需要在大约 30 个数据库上运行。这是一个片段:

ALTER TABLE <whatever_database>.`tblusers` ADD COLUMN `availability` ...

ALTER TABLE <whatever_database>.`tblusers` ADD COLUMN `reliability` INTEGER ...

此脚本中有更多行,我想在要更新的当前数据库循环中自动执行它。我已经使用游标获得了列表和循环,但这是我遇到麻烦的地方:

当我在游标中的特定数据库上时,该数据库名称位于变量中。我不能只说 ALTER TABLE curschema.tblusers 因为脚本提示没有名为 curschema 的数据库(包含我要运行操作的数据库名称的变量的名称)。我已经能够通过使用参数创建和执行语句来解决这个问题:

SET @curschema = curschema;
SET @query = NULL;
SET @email = emailAddress;
SET @pass = pass;
SET @statement = CONCAT('SELECT userid INTO @query FROM ', @curschema, '.tbluser 
PREPARE stmt FROM @statement;
EXECUTE stmt;

问题是,设置可执行字符串(如上)将成为一项极其繁琐的任务,需要运行数十行代码。我希望有一种方法可以设置当前数据库以进行操作,然后在每个循环通过时重置该数据库,以便可以运行我的通用语句:

(我的循环开始)

SET DATABASE database0 --(到 database29)

-- 使用上面的命令运行带有 database0 .... 29 的语句

ALTER TABLE `tblusers` ADD COLUMN `availability` TINYINT(1) UNSIGNED ...

ALTER TABLE `tblusers` ADD COLUMN `reliability` INTEGER UNSIGNED NOT ...

(循环结束)

是否存在这样的命令来设置可以执行操作的当前数据库?如果不存在这样的命令,是否有更简单的方法来完成我的任务?我认为在这个时刻,对所有数据库名称进行 30 次查找/替换比将整个脚本文件重写为可执行/参数化字符串更容易。

谢谢!

最佳答案

你试过了吗USE ?

USE db_name

The USE db_name statement tells MySQL to use the db_name database as the default (current) database for subsequent statements. The database remains the default until the end of the session or another USE statement is issued.

例子:

USE db1;
SELECT COUNT(*) FROM mytable;   # selects from db1.mytable
USE db2;
SELECT COUNT(*) FROM mytable;   # selects from db2.mytable

关于mysql - 在 MySQL 脚本中设置当前数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1820971/

相关文章:

mysql - 用于存储各种可用日期的表架构

php - 使用 PHP 将 HTML 表单中的数据插入到 MySQL 数据库

PHP/MYSQL延迟更新查询

php - $wpdb 是空的,尽管它是全局的

java - 在数据库中存储 BLOB 的最佳方式是什么?

database - 什么时候应该使用 Oracle 的索引组织表?或者,我什么时候不应该这样做?

mysql - MySQL 抛出 1005 错误

mysql - 构建具有日期差距的报告

python - MySQL 触发器到 RabbitMQ

php - FPDF-PHP pdf生成问题