Yalnızca yoksa benim tablo için bir sütun oluşturmaya çalışıyorum. Çok araştırdım ama henüz bir çözüm bulamadım.
Şartlı olarak Sütun oluşturmak gerçekten mümkün mü?
Yalnızca yoksa benim tablo için bir sütun oluşturmaya çalışıyorum. Çok araştırdım ama henüz bir çözüm bulamadım.
Şartlı olarak Sütun oluşturmak gerçekten mümkün mü?
Yanıtlar:
MySQL ALTER TABLE
yok IF EXISTS
şartname.
Düzenli olarak yapmanız gereken bir şeyse, saklanan bir proc veya programlama dilini kullanarak aşağıdakileri yapabilirsiniz:
pseudocode:
Aşağıdaki SQL'i kullanarak sütunun bulunup bulunmadığını bulun:
SEÇ column_name
DAN INFORMATION_SCHEMA
. COLUMNS
NEREDE TABLE_SCHEMA
= [Veritabanı Adı] AND TABLE_NAME
= [Tablo Adı];
Yukarıdaki sorgu bir sonuç döndürürse, sütunun var olduğu anlamına gelir, aksi takdirde devam edip sütunu oluşturabilirsiniz.
column_name
. Sorguyu şu şekilde değiştirdim: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]'
Aslında şimdi Maria DB 10.219 için var
ALTER TABLE test ADD COLUMN IF NOT EXISTS column_a VARCHAR(255);
Bonus, MODIFY için de çalışıyor
ALTER TABLE test MODIFY IF EXISTS column_a VARCHAR(255);
Başka bir StackOverFlow yayınında daha önce bahsedilen bu çözümü kullanabilirsiniz: (Ref .: https://stackoverflow.com/a/31989541/ )
MySQL - yoksa bir sütun eklemek için ALTER TABLE:
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;
Aşağıdaki benim için çalıştı:
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;