Jestem ciekawy ... Co jest złego w tym, że modyfikacja kończy się błędem, jeśli kolumna już istnieje?
Derek Downey,
Właściwie muszę dostarczyć plik .sql do mojego klienta, który zawierałby wszystkie zapytania związane ze zmianami struktury DB. Nie mogę wysłać całej bazy danych. Chcę tylko wysłać im zmiany db. w tym pliku sql znajduje się o wiele więcej zapytań. Jeśli to zapytanie dotyczące tworzenia kolumn nie powiedzie się, nie powiedzie się wszystkie zapytania. Dlatego właśnie chcę użyć warunku do utworzenia kolumny.
zzzzz,
Jeśli baza danych obsługuje tę funkcję, możesz użyć wyzwalacza. PRZED WPROWADZENIEM.
cybernard
Odpowiedzi:
8
MySQL ALTER TABLEnie ma IF EXISTSspecyfikacji.
Możesz wykonać następujące czynności, korzystając z zapisanego proc lub języka programowania, jeśli jest to coś, co musisz robić regularnie:
Pseudo kod:
Sprawdź, czy kolumna istnieje, używając poniższego kodu SQL:
SELECT column_name
FROM INFORMATION_SCHEMA. COLUMNS
GDZIE TABLE_SCHEMA= [nazwa bazy danych] ORAZ TABLE_NAME= [nazwa tabeli];
Jeśli powyższe zapytanie zwraca wynik, oznacza to, że kolumna istnieje, w przeciwnym razie możesz przejść dalej i utworzyć kolumnę.
W MySQL / MariaDB pojawia się błąd przy użyciu tego zapytania, stwierdzając, że column_namenie istnieje. Przeformułowałem zapytanie w następujący sposób:SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='[Schema_name]' AND TABLE_NAME='[Table_name]' and column_name='[Column_name]';
Jesus Alonso Abad
2
Dla prostej odpowiedzi 0 lub 1 zarówno w MySQL, jak i (jak sądzę) MariaDB:SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='[Schema_name]' AND TABLE_NAME='[Table_name]' AND column_name='[Column_name]'
piojo,
14
W rzeczywistości istnieje teraz dla Maria DB 10.219
ALTERTABLE test ADDCOLUMNIFNOTEXISTS column_a VARCHAR(255);
Bonus, działa również dla MODIFY
ALTERTABLE test MODIFY IFEXISTS column_a VARCHAR(255);
Odpowiedzi:
MySQL
ALTER TABLE
nie maIF EXISTS
specyfikacji.Możesz wykonać następujące czynności, korzystając z zapisanego proc lub języka programowania, jeśli jest to coś, co musisz robić regularnie:
Pseudo kod:
Sprawdź, czy kolumna istnieje, używając poniższego kodu SQL:
SELECT
column_name
FROMINFORMATION_SCHEMA
.COLUMNS
GDZIETABLE_SCHEMA
= [nazwa bazy danych] ORAZTABLE_NAME
= [nazwa tabeli];Jeśli powyższe zapytanie zwraca wynik, oznacza to, że kolumna istnieje, w przeciwnym razie możesz przejść dalej i utworzyć kolumnę.
źródło
column_name
nie istnieje. Przeformułowałem zapytanie w następujący sposób:SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='[Schema_name]' AND TABLE_NAME='[Table_name]' and column_name='[Column_name]';
SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='[Schema_name]' AND TABLE_NAME='[Table_name]' AND column_name='[Column_name]'
W rzeczywistości istnieje teraz dla Maria DB 10.219
Bonus, działa również dla MODIFY
źródło
Możesz użyć tego rozwiązania, wspomnianego już w innym wpisie StackOverFlow: (zob .: https://stackoverflow.com/a/31989541/ )
MySQL - ALTER TABLE, aby dodać kolumnę, jeśli nie istnieje:
źródło
To poniżej działało dla mnie:
źródło