Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

tambahkan kolom ke tabel mysql jika tidak ada

Berikut ini adalah solusi yang berfungsi (baru saja mencoba dengan MySQL 5.0 di Solaris):

DELIMITER $$

DROP PROCEDURE IF EXISTS upgrade_database_1_0_to_2_0 $$
CREATE PROCEDURE upgrade_database_1_0_to_2_0()
BEGIN

-- rename a table safely
IF NOT EXISTS( (SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE()
        AND TABLE_NAME='my_old_table_name') ) THEN
    RENAME TABLE 
        my_old_table_name TO my_new_table_name,
END IF;

-- add a column safely
IF NOT EXISTS( (SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE()
        AND COLUMN_NAME='my_additional_column' AND TABLE_NAME='my_table_name') ) THEN
    ALTER TABLE my_table_name ADD my_additional_column varchar(2048) NOT NULL DEFAULT '';
END IF;

END $$

CALL upgrade_database_1_0_to_2_0() $$

DELIMITER ;

Sepintas mungkin terlihat lebih rumit dari yang seharusnya, tetapi kita harus menghadapi masalah berikut di sini:

  • IF pernyataan hanya berfungsi dalam prosedur tersimpan, bukan saat dijalankan secara langsung, mis. di klien mysql
  • lebih elegan dan ringkas SHOW COLUMNS tidak berfungsi dalam prosedur tersimpan jadi harus menggunakan INFORMATION_SCHEMA
  • Sintaksis untuk pernyataan pembatas aneh di MySQL, jadi Anda harus mendefinisikan ulang pembatas untuk dapat membuat prosedur tersimpan. Jangan lupa untuk mengganti pembatas kembali!
  • INFORMATION_SCHEMA bersifat global untuk semua database, jangan lupa untuk memfilter pada TABLE_SCHEMA=DATABASE() . DATABASE() mengembalikan nama database yang dipilih saat ini.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Membuat Tabel di MySQL Workbench menggunakan GUI

  2. MySQL 1062 - Entri duplikat '0' untuk kunci 'PRIMARY'

  3. Cara Bootstrap MySQL atau MariaDB Galera Cluster - Diperbarui

  4. Cara Mengubah Detik ke Nilai Waktu di MySQL

  5. Menggunakan SSH Tunneling sebagai Alternatif VPN