Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Przejdź przez wszystkie tabele i zmień nazwę kolumny

Na szczęście MySQL 8 jest dostarczany z ALTER TABLE RENAME COLUMN a TO b składnię, dzięki czemu możesz napisać dość prostą procedurę składowaną, aby to zrobić.

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

Jest to bardziej skomplikowane w wersji 5.7 i wcześniejszych, ponieważ musisz wygenerować ALTER TABLE CHANGE a b ... oświadczenie, które zawiera pełną definicję kolumny.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Odniesienie do zapytania zewnętrznego w podzapytaniu JOIN

  2. MySQL Boolean tinyint(1) przechowuje wartości do 127?

  3. Błąd podczas używania niestandardowej funkcji DQL z Doctrine i Symfony2

  4. Ładowanie plików CSV do MySQL Workbench

  5. 1 pod ma niezwiązane natychmiastowe PersistentVolumeClaims na Minikube