时间:2021-05-24
背景
现在我有这么一个需求:
数据库A的user表需要导入到数据库B的account表
user表字段:uid,username,email,password,regdate,salt
account表字段:id,name,email,password,type,salt
导入的字段只有username,email,password,salt,并且regdate需要符合某个条件
下面分几种情况来写sql,主要区分insert into和replace into
情况
导入的数据在B库的表中完全不存在
直接insert into就好,使用replace into效果一样
导入的数据部分存在
数据部分存在为了区分需要在两个表添加唯一索引,这个唯一索引(UNIQUE)必须是导入的字段里面的值
我在两个表中分别为username和name字段添加唯一索引
直接替换
replace into在操作的时候如果两表数据重复(必须定义UNIQUE),会先删掉那一行(注意是一整行),然后再执行insert into
造成的后果就是,account表中的type字段如果原来有值,会直接删掉,并重新插入,即变成默认值了
REPLACE INTO `B`.`account`(NAME,PASSWORD,email,salt)SELECT username,PASSWORD,email,saltFROM `A`.`users`WHERE regdate>1418313600忽略重复
用IGNORE关键字,如果遇到重复,不会操作当前行
部分更新
比如果只想更新password和salt字段,可以用ON DUPLICATE KEY UPDATE
总结
replace into比较暴力,网上也有说慎重使用的,最好用insert into代替
疑问
以上的操作是两个数据库在同一台服务器上的,直接一条sql就可以搞定
假如要导的两个库在不同的两个服务器上要怎么做啊?
目前暂时的办法:
将A库中的user表导入到B库所在的另一台服务器上,然后写一条sql搞定
或者查询出指定数据,导出sql,在sql中将insert into替换为insert ignore into(有局限性)
以上所述就是本文的全部内容了,希望大家能够喜欢。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
Linux下均在控制台下操作。导入数据库:前提:数据库和数据表要存在(已经被创建)(1)将数据表test_user.sql导入到test数据库的test_use
数据表设计。数据表是数据库对用户的体现途径。按照用户的不同需求,数据库的设计也有所区别,而数据库的设计与网站的规模密切联系。数据库的设计需要满足用户网站的多样性
目录(一)使用Workbench操作数据库①创建数据库②修改数据库③删除数据库④设置默认数据库(二)使用Workbench操作数据表①创建数据表②查看数据表③修
Mysql中'employee'表内容如下:#__Desc__=从数据库中导出数据到excel数据表中importxlwtimportpymysqlclassM
数据表的设计。数据表的设计工作也是数据库设计工作不可或缺的重要组成部分,数据表设计的好坏是通过用户的体验得以展现的,根据用户需求的不同,设计能够满足不同用户的数