*我想删除MySQL中所有表名的前缀
我有一个包含100多个表的测试数据库,因此我不想通过手动过程或重命名每个表格。
e.g 的 ci_categories 的 ci_products
预期产量: 的类别 的产品
我想从所有表中删除前缀,即 ci _
是否有MySQL查询来实现这一目标?
由于 阿米特
答案 0 :(得分:1)
我已经编写了一个mysql存储过程来更改表名,因为没有其他直接的方法可以通过单个查询更改所有表名。
delimiter //
CREATE PROCEDURE `ChangeTableNameProcedure`()
BEGIN
DECLARE int_val INT DEFAULT 0;
DECLARE my_outer_cursor_done INT DEFAULT FALSE;
DECLARE my_oldTable VARCHAR(100);
DECLARE my_newTable VARCHAR(100);
DECLARE tableNameCursor CURSOR FOR SELECT TABLE_NAME oldName,
CONCAT(SUBSTRING(TABLE_NAME,POSITION('ci_' IN TABLE_NAME) + 3)) newName
FROM information_schema.tables
WHERE TABLE_SCHEMA = 'YOUR_DATABASE_NAME' AND TABLE_NAME LIKE 'ci_%';
DECLARE CONTINUE HANDLER FOR NOT FOUND SET my_outer_cursor_done = TRUE;
OPEN tableNameCursor;
OUTER_CURSOR_LOOP: LOOP
FETCH FROM tableNameCursor INTO my_oldTable,my_newTable;
IF my_outer_cursor_done THEN
CLOSE tableNameCursor;
LEAVE OUTER_CURSOR_LOOP;
END IF;
SET @old = my_oldTable;
SET @new = my_newTable;
SET @statement = CONCAT('RENAME TABLE ',@old,' TO ',@new);
PREPARE stmt FROM @statement;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END LOOP OUTER_CURSOR_LOOP;
END//
<强> N:B:强>
Call ChangeTableNameProcedure();