Saya ingin tahu ... Apa yang salah dengan membiarkan alter gagal pada kesalahan jika kolom sudah ada?
Derek Downey
Sebenarnya saya perlu memberikan file .sql ke klien saya yang akan memiliki semua permintaan terkait dengan Perubahan struktur DB. Saya tidak bisa mengirim seluruh database mereka. Saya hanya ingin mengirim mereka perubahan db. ada banyak lagi pertanyaan dalam file sql itu. Jika kueri ini tentang membuat kolom gagal maka itu akan gagal semua kueri. Jadi itu sebabnya saya ingin menggunakan jika kondisi untuk membuat kolom.
zzzzz
Jika database Anda mendukungnya, Anda bisa menggunakan pemicu. SEBELUM MASUK.
cybernard
Jawaban:
7
MySQL ALTER TABLEtidak memiliki IF EXISTSspesifikasi.
Anda dapat melakukan hal berikut dengan menggunakan proc yang tersimpan atau bahasa pemrograman jika ini adalah sesuatu yang perlu Anda lakukan secara teratur:
Kodesemu:
Cari apakah kolom ada menggunakan SQL di bawah ini:
PILIH column_name
DARI INFORMATION_SCHEMA. COLUMNS
WHERE TABLE_SCHEMA= [Nama Basis Data] DAN TABLE_NAME= [Nama Tabel];
Jika kueri di atas mengembalikan hasil maka itu berarti kolom ada, jika tidak Anda dapat melanjutkan dan membuat kolom.
Di MySQL / MariaDB saya mendapatkan kesalahan menggunakan permintaan itu, menyatakan bahwa column_nametidak ada. Saya merumuskan ulang pertanyaan untuk:SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='[Schema_name]' AND TABLE_NAME='[Table_name]' and column_name='[Column_name]';
Jesus Alonso Abad
2
Untuk jawaban 0 atau 1 sederhana pada MySQL dan (saya pikir) MariaDB:SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='[Schema_name]' AND TABLE_NAME='[Table_name]' AND column_name='[Column_name]'
piojo
13
Sebenarnya ada sekarang untuk Maria DB 10.219
ALTERTABLE test ADDCOLUMNIFNOTEXISTS column_a VARCHAR(255);
Bonus, ini berfungsi untuk MENGUBAH juga
ALTERTABLE test MODIFY IFEXISTS column_a VARCHAR(255);
Jawaban:
MySQL
ALTER TABLE
tidak memilikiIF EXISTS
spesifikasi.Anda dapat melakukan hal berikut dengan menggunakan proc yang tersimpan atau bahasa pemrograman jika ini adalah sesuatu yang perlu Anda lakukan secara teratur:
Kodesemu:
Cari apakah kolom ada menggunakan SQL di bawah ini:
PILIH
column_name
DARIINFORMATION_SCHEMA
.COLUMNS
WHERETABLE_SCHEMA
= [Nama Basis Data] DANTABLE_NAME
= [Nama Tabel];Jika kueri di atas mengembalikan hasil maka itu berarti kolom ada, jika tidak Anda dapat melanjutkan dan membuat kolom.
sumber
column_name
tidak ada. Saya merumuskan ulang pertanyaan untuk: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]'
Sebenarnya ada sekarang untuk Maria DB 10.219
Bonus, ini berfungsi untuk MENGUBAH juga
sumber
Anda dapat menggunakan solusi ini, yang telah disebutkan di pos StackOverFlow lain: (Ref .: https://stackoverflow.com/a/31989541/ )
MySQL - ALTER TABLE untuk menambahkan kolom jika tidak ada:
sumber
Ini di bawah ini bekerja untuk saya:
sumber