zoukankan      html  css  js  c++  java
  • SQL批量添加数据略谈(更新)

        很多时候,我们需要把客户的产品添加到数据库,一般来说客户给的都是Excel这种表格数据,而我们平常程序中用的是mysql或者sql server,这样就需要数据导入,对于数据量小的当然可以手动添加,如果数据量过万甚至几十万,那么手动简直就是不可能完成的,这个时候我们就需要写一些辅助程序,这些程序不是给客户用,而是用来导入数据的工具一样.那么我们来结合实际例子来说说怎么开发这样的代码段.

        拿到数据,首先就是数据分析,找出数据之间的关系,一般只有一两个表那就容易,多则三个以上就要用草图标记之间关系.

    这是一个简图,随便画的,太难看了,我们需要给所有的属性表里面产品添加属性,产品表和属性表关联id就是产品id,属性表存储属性分类id和属性值id,属性分类里面存储了颜色,大小,重量,属性值就是颜色大小重量的取值,等字段.我们要做的就是往属性表添加下面的属性,也就是插入颜色id,大小id,重量id,以及各自对应值得id,通过一条sql我们发现没有办法插入,因为我们需要查询数据,把查询的结果作为数据插入,这时候就需要分条插入,颜色,大小,重量三条数据插入,这时候数据变量就只有对应的值,他们的分类只有一个,通过php循环sql插入语句即可,这里用3个循环就可以插入,再插入之前,还需要先把产品id查询出来,做一个循环,在里面插入这三条语句,也就是这里是双重循环,一个大循环里面有6个小循环,三个查询,三个插入,等我们写完后就可以自动插入属性,运行不过几秒就完成了,如果手动的话,那工作量不敢想象,.具体代码就不贴了,项目中用的,就一次导入就不用了.

        想说的是sql里面有什么通过values((1,1,),(1,2),(1,3))也可以插入数据,但是要转换格式也是头痛的事情!ok,回家了

    看了大家说的,特别研究了下其他用法:一并记录到这里!

    INSERT INTO table1 VALUES(null,'admin','admin',null,23,'留言');#插入所有列数据
    INSERT INTO table1(id,age,content) VALUES(null,23,'留言'); #按照字段插入,没有的就是null
    INSERT INTO table2(t1id,user,pass) SELECT id,username,password FROM table1;#查询表1数据插入表2,查询字段可添加常量,数据类型会自动转化,后边也支持WHERE条件.
    SELECT id,username,password,sex,age,content INTO table3 FROM table1;#查询表1数据创建新表2,Mysql不支持下面是等价语句
    CREATE TABLE table3 SELECT * FROM table1;#查询数据1创建表3,表3需要不存在
    DROP TABLE IF EXISTS table3;#删除表3不存在就退出
    alter TABLE table3 ADD PRIMARY key(id);#添加主键
    alter table table3 add index (id,sex);#添加索引
    ALTER TABLE table3 CHANGE id id INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT;#添加属性或修改属性,修改字段,第二个id不同的话就是更改字段名称
    SELECT * INTO OUTFILE 'E:\\1.txt' FROM table1;#导出数据到E盘 支持xls
    UPDATE table1 SET username='logove@qq.com' WHERE id=2;#修改第二条数据的用户名字段值
    UPDATE table1 LEFT JOIN table2 ON table1.id=table2.id SET username='logove@qq.com',user='qq.com' WHERE password='admin';#同时更新两张表,支持inner join...on
    UPDATE table1 set username = REPLACE(username,'admin','admin1');#将表里面字段的值替换admin改成admin1
    UPDATE table1 INNER JOIN table3 ON table1.id=table3.id SET table1.username=table3.content;#将后一个表的内容更新到前面表,可以跟where条件.可以使用其他表链接
    DELETE FROM table1 WHERE id=1;#删除id=3的记录
    DELETE table1,table2 FROM table1 INNER JOIN table2 ON table1.id=table2.id WHERE table1.id=4;#删除两个表里id=4的记录
    DELETE FROM table2 where id in(SELECT id from table1);#删除表2在表1中所有记录字段的结果.

    看来insert into...select语句第一次用到!

  • 相关阅读:
    机器学习:贝叶斯分类器(一)——朴素贝叶斯分类器
    机器学习:kNN算法(二)—— 实战:改进约会网站的配对效果
    机器学习:kNN算法(一)—— 原理与代码实现(不调用库)
    Oracle给表设置自增字段
    IMAP、POP3、SMTP邮件服务器
    网站高并发大流量访问的10个处理及解决方案
    浅谈async/await
    【前端】加载的图片太多或者太大优化方案(上)
    【前端】本地调试H5页面方案总结
    alphafold2_conda版安装
  • 原文地址:https://www.cnblogs.com/logoove/p/2610451.html
Copyright © 2011-2022 走看看