公司系统升级,原来那套系统的数据库是旧版的,字段比新版的少很多,现在提出要求,把字段少的那个表的数据,复制到新表中。
思路:使用SQL语句,注意,前面这个表名后面加括号,后面select后面不加括号
INSERT INTO 新表 ( name , price ) SELECT name , price FROM 旧表
这个语句有个缺点就是表名后面的字段名,例如name,price这些我们不好获取,一个表还好说,多个表的话每个表去写那些字段也够烦的,但是,sql语句可以获取一个表全部字段,并把字段组合成带逗号的语句,刚好符合我们的要求。
select GROUP_CONCAT(COLUMN_NAME) from information_schema.COLUMNS where table_name = '旧表名' and table_schema = '库名';
这样我们就想,如果能把获取到的字段名字符串,放到表名后面,不就行了吗?
但可惜的是,MYSQL并不支持这样,直接把搜索结果放到表名后面会报错。
于是,我们借用PHP,其中DB那个是我用的框架带的MYSQL查询功能,其实只要其中的SQL语句即可:
public function testInsert(){
$old_table = '旧前缀_旧表名';