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

Ulangi semua tabel dan ganti nama kolom

Untungnya MySQL 8 dilengkapi dengan ALTER TABLE RENAME COLUMN a TO b sintaks sehingga Anda dapat menulis prosedur tersimpan yang cukup mudah untuk melakukan ini.

DELIMITER //

CREATE PROCEDURE rename_columns(IN name_of_database CHAR(64),
                                IN old_name_of_column CHAR(64),
                                IN new_name_of_column CHAR(64))
BEGIN
    DECLARE done INT DEFAULT FALSE;
    DECLARE name_of_table CHAR(64);
    DECLARE table_cursor CURSOR FOR
        SELECT TABLE_NAME FROM information_schema.COLUMNS
        WHERE TABLE_SCHEMA = name_of_database AND COLUMN_NAME = old_name_of_column;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
    OPEN table_cursor;
    table_loop: LOOP
        FETCH table_cursor INTO name_of_table;
        IF done THEN LEAVE table_loop; END IF;
        SET @alter_sql = CONCAT(
            'ALTER TABLE ', name_of_database, '.', name_of_table,
            ' RENAME COLUMN ', old_name_of_column, ' TO ', new_name_of_column);
        PREPARE alter_statement FROM @alter_sql;
        EXECUTE alter_statement;
        DEALLOCATE PREPARE alter_statement;
    END LOOP;
    CLOSE table_cursor;
END//

DELIMITER ;

CALL rename_columns('old_data', 'hash', 'old_hash');

Ini lebih rumit di 5.7 dan sebelumnya karena Anda harus membuat ALTER TABLE CHANGE a b ... pernyataan yang mencakup definisi kolom lengkap.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara menghubungkan NetBeans ke database MySQL?

  2. Bagaimana cara mendapatkan kunci utama peningkatan otomatis MySQL dari Sequelize di save ()?

  3. Optimasi SQL Query - waktu eksekutif

  4. Buat kueri untuk mendapatkan jumlah panggilan yang belum selesai

  5. Tidak dapat mengakses MySQL setelah secara otomatis membuat kata sandi sementara