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 TABLE
tidak memiliki IF 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
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_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
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;