Saya mencoba membuat Kolom untuk tabel saya hanya jika tidak ada. Saya sudah banyak meneliti tetapi saya belum menemukan solusi.
Apakah ini benar-benar memungkinkan untuk membuat kolom secara kondisional?
Saya mencoba membuat Kolom untuk tabel saya hanya jika tidak ada. Saya sudah banyak meneliti tetapi saya belum menemukan solusi.
Apakah ini benar-benar memungkinkan untuk membuat kolom secara kondisional?
Jawaban:
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.
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]';
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
ALTER TABLE test ADD COLUMN IF NOT EXISTS column_a VARCHAR(255);
Bonus, ini berfungsi untuk MENGUBAH juga
ALTER TABLE test MODIFY IF EXISTS column_a VARCHAR(255);
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:
SET @dbname = DATABASE();
SET @tablename = "tableName";
SET @columnname = "colName";
SET @preparedStatement = (SELECT IF(
(
SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
WHERE
(table_name = @tablename)
AND (table_schema = @dbname)
AND (column_name = @columnname)
) > 0,
"SELECT 1",
CONCAT("ALTER TABLE ", @tablename, " ADD ", @columnname, " INT(11);")
));
PREPARE alterIfNotExists FROM @preparedStatement;
EXECUTE alterIfNotExists;
DEALLOCATE PREPARE alterIfNotExists;
Ini di bawah ini bekerja untuk saya:
SELECT count(*)
INTO @exist
FROM information_schema.columns
WHERE table_schema = 'mydatabase'
and COLUMN_NAME = 'mycolumn'
AND table_name = 'mytable' LIMIT 1;
set @query = IF(@exist <= 0, 'ALTER TABLE mydatabase.`mytable` ADD COLUMN `mycolumn` MEDIUMTEXT NULL',
'select \'Column Exists\' status');
prepare stmt from @query;
EXECUTE stmt;