2009-11-30 45 views
10

Tôi có một tập lệnh cho MySQL cần chạy trên khoảng 30 cơ sở dữ liệu. Dưới đây là một đoạn trích:Đặt cơ sở dữ liệu hiện tại trong MySQL Script

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

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

Có nhiều dòng khác trong tập lệnh này và tôi muốn tự động hóa nó trong một cơ sở dữ liệu hiện tại được cập nhật. Tôi đã có danh sách và vòng lặp xuống sử dụng con trỏ, nhưng đây là nơi tôi đang gặp sự cố:

Khi tôi đang ở trên một cơ sở dữ liệu cụ thể trong con trỏ, tên cơ sở dữ liệu đó nằm trong một biến. Tôi không thể chỉ nói ALTER TABLE curschema. tblusers vì tập lệnh phàn nàn rằng không có cơ sở dữ liệu có tên là curschema (tên của biến chứa tên cơ sở dữ liệu mà tôi muốn chạy các hoạt động). Tôi đã có thể làm việc này bằng cách tạo ra và thực hiện một tuyên bố sử dụng các thông số:

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; 

Vấn đề là, thiết lập chuỗi thực thi (như trên) sẽ trở thành một nhiệm vụ vô cùng tẻ nhạt với hàng chục dòng mã tôi phải chạy. Tôi đã hy vọng rằng có một cách mà tôi có thể thiết lập các cơ sở dữ liệu hiện tại cho các hoạt động và sau đó chỉ cần thiết lập lại rằng cơ sở dữ liệu mỗi vòng lặp vượt qua để báo cáo chung của tôi có thể được chạy:

(bắt đầu vòng lặp của tôi)

SET DATABASE database0 - (thông qua để database29)

- báo cáo chạy với database0 .... 29 được ngụ ý với lệnh trên

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

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

(cuối vòng lặp của tôi)

Lệnh này tồn tại để đặt cơ sở dữ liệu hiện tại có thể thực hiện các thao tác nào? Nếu không có lệnh như vậy tồn tại, là có một cách dễ dàng hơn để hoàn thành nhiệm vụ của tôi? Tôi thấy rằng tại thời điểm này, việc tìm/thay thế tất cả các tên cơ sở dữ liệu trở nên dễ dàng hơn 30 lần so với việc viết lại toàn bộ tệp kịch bản của tôi thành các chuỗi có khả năng thực thi/tham số.

Cảm ơn!

Trả lời

28

Bạn đã thử USE?

USE db_name 

Dùng USE tuyên bố db_name nói với MySQL để sử dụng cơ sở dữ liệu db_name như sự (hiện tại) cơ sở dữ liệu mặc định cho báo cáo tiếp theo. Cơ sở dữ liệu vẫn là mặc định cho đến khi kết thúc phiên hoặc một tuyên bố USE được phát hành.

Ví dụ:

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

Đã không cố gắng đó, nhưng từ kiểm tra nhanh của tôi ở đây có vẻ như nó hoạt động một điều trị! Cảm ơn! Tôi đã tìm kiếm trực tuyến và thông qua các tài liệu MySQL và không thể tìm thấy bất cứ điều gì dứt khoát. – afilbert

+0

Doh! Bây giờ tôi tìm thấy nó trong tài liệu MySQL. Tôi đoán đôi khi bạn phải biết cách hỏi truy vấn tìm kiếm phù hợp. Cảm ơn một lần nữa! – afilbert

+0

Chắc chắn! Không vấn đề gì. –

Các vấn đề liên quan