MySQL: Bagaimana cara membuat Kolom jika tidak ada?


13

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

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

3
> "MYSQL 5.5.5"? Ini tidak benar, ini hanya fitur Maria DB.
Excalibur

1
terima kasih atas koreksinya
Paroofkey

6

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;

2

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;

Saya pergi dengan yang ini, terima kasih.
Stuart McIntyre
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.