2009-11-30 19 views
10

Tengo un archivo de script para MySQL que debe ejecutarse en aproximadamente 30 bases de datos. He aquí un fragmento:Establecer la base de datos actual en MySQL script

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

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

hay muchas más líneas en este guión y me gustaría para automatizar en un bucle de bases de datos actuales que ser actualizado. Tengo la lista y el bucle hacia abajo usando los cursores, pero aquí es donde me estoy quedando en problemas:

Cuando estoy en una base de datos en particular en el cursor, que es el nombre de base de datos en una variable. No puedo simplemente decir ALTER TABLE curschema. tblusers porque el guión se queja de que no hay ninguna base de datos curschema con nombre (el nombre de la variable que contiene el nombre de la base de que me gustaría ejecutar operaciones sobre). He sido capaz de solucionar esto mediante la creación y ejecución de una sentencia utilizando parámetros:

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; 

El problema es, la creación de cadenas ejecutables (como el anterior) se convertirá en una tarea extremadamente tediosa con las docenas de líneas de código que tengo que correr Yo esperaba que hubiera una manera que pudiera establecer la base de datos actual para las operaciones y luego simplemente reiniciar la base de datos cada bucle pasar por lo que mis declaraciones genéricas podrían ser ejecutados:

(comienzo de mi bucle) BASE DE DATOS

SET database0 - (a través de database29)

- declaraciones correr con database0 .... 29 se implicó con el comando anterior

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

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

(final de mi bucle)

¿Existe un comando para configurar la base de datos actual en la que se pueden realizar operaciones? Si no existe dicho comando, ¿hay una manera más fácil de llevar a cabo mi tarea? Calculo que en este momento es simplemente más fácil de hacer una búsqueda/reemplazo de todos los nombres de bases de datos 30 veces más de lo que es volver a escribir toda mi archivo de secuencia de comandos para ser cadenas ejecutables/parámetros-izada.

Gracias!

Respuesta

28

¿Usted intentó USE?

comunicado nombre_base_de_datos
USE db_name 

La USO dice a MySQL utilizar la base de datos nombre_base_de_datos como la base de datos por defecto (actual) de las declaraciones posteriores. La base de datos sigue siendo el defecto hasta el final de la sesión o de otro uso se emite comunicado.

Ejemplo:

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

no he probado, pero de mis pruebas rápidas aquí parece que funciona un lujo! ¡Gracias! Estaba buscando en línea y a través de la documentación de MySQL y no pude encontrar nada definitivo. – afilbert

+0

Doh! Ahora lo encuentro en la documentación de MySQL. Supongo que a veces debes saber cómo hacer la consulta de búsqueda correcta. ¡Gracias de nuevo! – afilbert

+0

¡Claro! No hay problema. –

Cuestiones relacionadas