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语句第一次用到!

posted @ 2012-07-26 17:32  Yoby  阅读(3730)  评论(9编辑  收藏  举报