sql >> データベース >  >> RDS >> Mysql

すべてのテーブルをループして、列の名前を変更します

    幸い、MySQL8にはALTER TABLE RENAME COLUMN a TO bが付属しています。 構文。これを行うための合理的に単純なストアドプロシージャを記述できます。

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

    5.7以前では、ALTER TABLE CHANGE a b ...を生成する必要があるため、より複雑になります。 完全な列定義を含むステートメント。




    1. データベースの資格情報はどこに保管すればよいですか?

    2. ルールまたは通知を使用してマテリアライズドビューを自動的に更新します

    3. MySQLがFULLOUTERJOINSをサポートしていない理由はありますか?

    4. WindowsPhone8.1アプリはデータベースに接続します