2009-11-30 3 views
10

약 30 개의 데이터베이스에서 실행해야하는 MySQL 용 스크립트 파일이 있습니다.MySQL 데이터베이스에 현재 데이터베이스 설정

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

(database29에 이르기까지) - - database0 database0와 실행 문 .... 29 위의 명령

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

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

(내 루프의 끝)

로 암시되고

작업을 수행 할 수있는 현재 데이터베이스를 설정하는 명령이 있습니까? 그러한 명령이 없다면 내 작업을 수행하는 더 쉬운 방법이 있습니까? 이 시점에서 전체 스크립트 파일을 실행 가능/매개 변수화 된 문자열로 재 작성하는 것보다 모든 데이터베이스 이름을 30 번씩 찾기/바꾸기가 더 쉽다는 것을 알 수 있습니다.

감사합니다.

답변

28

USE을 사용해 보셨습니까?

USE db_name 

이용 DB_NAME 문은 다음 문에 로 디폴트 (현재) 데이터베이스의 DB_NAME 데이터베이스를 사용하여 MySQL을 알려줍니다. 데이터베이스는 세션이 끝날 때까지 계속 유지되거나 다른 USE 문이 발행됩니다.

예 :

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

는 것을 시도하지 않은, 그러나 그것은 치료를 작동처럼 여기 내 빠른 검사에서 보이는! 감사! 나는 온라인과 MySQL 문서를보고 있었고 결정적인 것을 찾을 수 없었다. – afilbert

+0

Doh! 이제 MySQL 설명서에서 찾을 수 있습니다. 가끔은 올바른 검색어를 묻는 법을 알아야 할 때가 있습니다. 다시 한 번 감사드립니다! – afilbert

+0

예! 문제 없어. –

관련 문제