mysql批量更新数据库内全部表某个字符串为另外一个字符串
示例:把指定数据库minex-pms所有表中的project_depart_name字段 重庆项目部更改为渝北项目部,不存在project_depart_name字段的表排除掉,使用临时表和sql脚本的方式实现
sql脚本:
-- 1. 创建实体表来存储需要更新的表名 CREATE TABLE IF NOT EXISTS tables_to_update ( table_name VARCHAR(255) ); -- 2. 插入需要更新的表名(排除视图) INSERT INTO tables_to_update (table_name) SELECT c.TABLE_NAME FROM information_schema.COLUMNS c JOIN information_schema.TABLES t ON c.TABLE_SCHEMA = t.TABLE_SCHEMA AND c.TABLE_NAME = t.TABLE_NAME WHERE c.TABLE_SCHEMA = 'minex-pms' AND c.COLUMN_NAME = 'project_depart_name' AND t.TABLE_TYPE = 'BASE TABLE'; -- 排除视图,只选择实际的表 -- 3. 删除已存在的存储过程(如果存在) DROP PROCEDURE IF EXISTS update_project_depart_name; -- 4. 创建存储过程来遍历实体表并执行更新操作 DELIMITER // CREATE PROCEDURE update_project_depart_name() BEGIN DECLARE done INT DEFAULT FALSE; DECLARE tbl_name VARCHAR(255); DECLARE cur CURSOR FOR SELECT table_name FROM tables_to_update; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; OPEN cur; read_loop: LOOP FETCH cur INTO tbl_name; IF done THEN LEAVE read_loop; END IF; SET @sql = CONCAT('UPDATE ', tbl_name, ' SET project_depart_name = ''渝北项目部'' WHERE project_depart_name = ''重庆项目部'''); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; END LOOP; CLOSE cur; END // DELIMITER ; -- 5. 调用存储过程执行更新操作 CALL update_project_depart_name(); -- 6. 删除实体表(可选,根据需求决定是否保留) DROP TABLE IF EXISTS tables_to_update; -- 7. 删除已存在的存储过程(如果存在) DROP PROCEDURE IF EXISTS update_project_depart_name;
以上脚本可以实现指定字段的需求
方式2如果数据量不大的话,可以使用navicat工具 先进行库内查找 再手动单张表进行替换
⎛⎝官萧何⎠⎞一只快乐的爪哇程序猿;邮箱:1570608034@qq.com