सौभाग्य से MySQL 8 एक 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 ...
जनरेट करना होगा। कथन जिसमें पूर्ण स्तंभ परिभाषा शामिल है।