Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Update kilku baz na raz
Forum PHP.pl > Forum > Bazy danych > MySQL
synec
Witam,

Mam takie pytanie mam kilkanaście tych samych baz. Teraz chciałbym dodać do nich wszystkich jedną tą samą tabele czy jest możliwość dodania tego jednym zapytaniem czy muszę w zapytaniu deklarować bazę i wykonać tyle zapytań ile jest baz?

Pozdrawiam.
sowiq
Zakładając, że wszystkie bazy są na jednym serwerze i masz uprawnienia do nich wszystkich, to możesz zrobić to tak:

  1. CREATE TABLE nazwa_bazy_danych_1.nazwa_tabelki(
  2. [...]
  3. );
  4. CREATE TABLE nazwa_bazy_danych_2.nazwa_tabelki(
  5. [...]
  6. );
  7. CREATE TABLE nazwa_bazy_danych_3.nazwa_tabelki(
  8. [...]
  9. );
synec
Cytat(sowiq @ 5.04.2013, 11:49:31 ) *
Zakładając, że wszystkie bazy są na jednym serwerze i masz uprawnienia do nich wszystkich, to możesz zrobić to tak:

  1. CREATE TABLE nazwa_bazy_danych_1.nazwa_tabelki(
  2. [...]
  3. );
  4. CREATE TABLE nazwa_bazy_danych_2.nazwa_tabelki(
  5. [...]
  6. );
  7. CREATE TABLE nazwa_bazy_danych_3.nazwa_tabelki(
  8. [...]
  9. );


Nie no tak to wiem że mogę zrobić. Tylko, w sumie baz jest 150 smile.gif i myślałem, że mogę zrobić to jakoś szybciej. Ale już wiem że się nie da. Buduje już skrypt który mi zbuduje zapytania. Ale dzięki za odpowiedź.

Pozdrawiam.
sowiq
Spróbuj z kursorami. Zerknij tutaj: http://dev.mysql.com/doc/refman/5.0/en/cursors.html i tutaj: http://stackoverflow.com/questions/2379116...procedure-on-it

[edit]
Tak na szybko wyszło mi coś takiego:
  1. CREATE PROCEDURE make_tables()
  2. BEGIN
  3. DECLARE done INT DEFAULT FALSE;
  4. DECLARE a CHAR(128);
  5. DECLARE SQLStmt TEXT;
  6. DECLARE cur CURSOR FOR SELECT schema_name FROM information_schema.schemata WHERE schema_name != 'information_schema';
  7. DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
  8.  
  9. OPEN cur;
  10.  
  11. read_loop: LOOP
  12. FETCH cur INTO a;
  13. IF done THEN
  14. LEAVE read_loop;
  15. END IF;
  16.  
  17. SET @SQLStmt = CONCAT('CREATE TABLE ', a, '.aa_test( a INT NOT NULL );');
  18. PREPARE Stmt FROM @SQLStmt;
  19. EXECUTE Stmt;
  20. DEALLOCATE PREPARE Stmt;
  21.  
  22. END LOOP;
  23.  
  24. CLOSE cur;
  25. END;


[edit 2]
Dodałem warunek do selecta w kursorze.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.