十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
mysql的语法和Sqlserver的语法还是有区别的:
网站建设哪家好,找创新互联!专注于网页设计、网站建设、微信开发、成都小程序开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了九江免费建站欢迎大家使用!
update tb_restaurant,tb_restPre set tb_restaurant.Cdate = tb_restPre.Cdate
where tb_restaurant.id=tb_restPre.ReplaceUid and tb_restPre.id=1 and tb_restaurant.id=1
使用相关子查询就可以实现:
update B set bc1=(select ac1 from A where A.aid=B.bid)
提供两个办法;
第一个是,笨办法,查找每个字段,看有单位的名称就修改一下。
第二个是,如果数据库数据量不大的话,可以使用mysqldump将数据导出到一个文本文件,然后使用文本文件的替换功能,将单位名称替换成正确的,然后再将数据导入数据库。
当然,也可以两个联合使用,比如先使用第二个方法中的mysqldump将数据导出,然后查找单位名称,看一共有多少处需要修改,然后再使用第一个方法中的update语句将字段值更新成新的单位名称。
MYSQL的数据是保存在文件里面的,在MYSQL的DATA文件夹下面,每个数据库是一个子文件夹,里面没个表有两三个文件,你直接从另外的数据库拷贝表的文件到这个数据库的文件夹里面,就能完成增加表、替换表。
--test库是目标库(做替换前一定要做好备份)
--test2是图片名字数据集表所在的库
use test2
-- 建立测试表和数据
create table picName (oldname varchar(200),newname varchar(200));
insert into picName values ('图片.JPG','tupian.JPG'),('博客.JPG','boke.JPG'),('网站.JPG','wangzhan.JPG');
commit;
-- 建立存储过程
drop procedure if exists dynamic_cursor;
CREATE PROCEDURE dynamic_cursor (IN db_name varchar(100))
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE v_updateSql varchar(2000);
DECLARE times INT DEFAULT 0;
--
--
declare _err int default 0;
DECLARE cur CURSOR for( SELECT updateSql from picName_view);
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION set _err=1;
DROP VIEW IF EXISTS picName_view;
SET @sqlstr = "CREATE VIEW picName_view as ";
-- SET @sqlstr = "";
SET @sqlstr =CONCAT(@sqlstr ,"select concat('update ",db_name,".`',a.table_name,'` set ',a.column_name,'=replace(',a.column_name,',''',b.oldname,''',''',b.newname,''')') updateSql");
SET @sqlstr =CONCAT(@sqlstr ," from information_schema.`COLUMNS` a ,picName b ");
SET @sqlstr =CONCAT(@sqlstr ," where a.TABLE_SCHEMA='",db_name,"' and ");
SET @sqlstr =CONCAT(@sqlstr ," (a.COLUMN_type like '%char%' or a.COLUMN_type like '%text%' or a.COLUMN_type like '%blob%')");
PREPARE stmt FROM @sqlstr;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
OPEN cur;
f_loop:LOOP
FETCH cur INTO v_updateSql;
IF done THEN
LEAVE f_loop;
END IF;
set @updateSql=v_updateSql;
PREPARE stmt2 FROM @updateSql;
EXECUTE stmt2;
set times=times+1;
-- SELECT v_updateSql;
END LOOP f_loop;
CLOSE cur;
/* */
COMMIT;
select times;
END;
-- 测试
call dynamic_cursor('test');