MySQL: yoksa Sütun nasıl oluşturulur?


14

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ü?


Merak ediyorum ... Sütun zaten mevcutsa, değişikliğin başarısız olmasına izin vermenin nesi yanlış?
Derek Downey

Aslında DB yapısı değişiklikleri ile ilgili tüm sorguları olurdu istemcime .sql dosyasını sağlamak gerekir. Tüm veritabanını gönderemiyorum. Ben sadece onlara db değişiklikleri göndermek istiyorum. o sql dosyasında çok daha fazla sorgu var. Sütun oluşturma ile ilgili bu sorgu başarısız olursa, tüm sorgularda başarısız olur. Bu yüzden eğer sütun oluşturmak için if koşulunu kullanmak istiyorum.
zzzzz

Veritabanınız destekliyorsa bir tetikleyici kullanabilirsiniz. EKLE ÖNCE.
cybernard

Yanıtlar:


8

MySQL ALTER TABLEyok 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.


MySQL / MariaDB'de bu sorguyu kullanmadığımı belirten bir hata alıyorum 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]';
Jesus Alonso Abad

2
Hem MySQL hem de (sanırım) SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='[Schema_name]' AND TABLE_NAME='[Table_name]' AND column_name='[Column_name]'
MariaDB'de

14

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);

3
> "MYSQL 5.5.5"? Bu doğru değil, bu sadece bir Maria DB özelliğidir.
Excalibur

1
için teşekkürler
Paroofkey

6

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;

2

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;

Bununla gittim, teşekkürler.
Stuart McIntyre
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.