【问题标题】:Rename column for all tables in mysql database重命名mysql数据库中所有表的列
【发布时间】:2015-07-30 09:43:24
【问题描述】:

我需要重命名数据库中所有表的列。 我可以使用此查询获取列列表:

 SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME= <Column Name>;

但实际上我怎么能尽可能简单地重命名它而不写

ALTER TABLE <Table Name >RENAME COLUMN <Old name> to <New Name>;

对于每个表。

我试着写了一个程序:

DELIMITER $$
     DROP PROCEDURE IF EXISTS  renameColumn $$
     CREATE PROCEDURE renameColumn(IN oldName tinytext, IN newName tinytext)
     BEGIN
       DECLARE @name VARCHAR(255);
       DECLARE exit_loop BOOLEAN;         
       DECLARE tableName_cursor CURSOR FOR SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME=oldName;
       DECLARE CONTINUE HANDLER FOR NOT FOUND SET exit_loop = TRUE;
       OPEN tableName_cursor;
       rename_loop: LOOP
        FETCH  tableName_cursor @name;
        ALTER TABLE @name RENAME COLUMN oldName to newName;
         IF exit_loop THEN
             LEAVE rename_loop;
         END IF;
       END LOOP rename_loop;
     END $$
     DELIMITER;

但我有以下错误: 您的 SQL 语法有错误;查看与您的 MySQL 服务器版本相对应的手册,了解在 '@name VARCHAR(255); 附近使用的正确语法;

DECLARE exit_loop BOOLEAN;

在第 3 行声明 ta'

你能帮我解决这个问题吗

【问题讨论】:

标签: mysql sql stored-procedures


【解决方案1】:

你可以试试这个。

SELECT CONCAT(
    'ALTER TABLE ', TABLE_NAME,
    ' RENAME COLUMN ', COLUMN_NAME,
    ' NEW_', COLUMN_NAME,
    ';') AS rename_script 
FROM INFORMATION_SCHEMA.COLUMNS  
WHERE TABLE_SCHEMA = 'your_db'

【讨论】:

    猜你喜欢
    • 2020-08-30
    • 1970-01-01
    • 2016-07-06
    • 1970-01-01
    • 2012-08-24
    • 2015-12-29
    • 1970-01-01
    • 2013-10-17
    • 1970-01-01
    相关资源
    最近更新 更多