sql 批量更新 批量入库

批量更新实测:

1.
INSERT INTO Mov (title)
     VALUES
('my'),('fjk'),('f3'),('g4')
2.
NTO Mov(id,title)
SELECT 1044,'zhangsan'
UNION ALL
SELECT 4444,'lisi'
UNION ALL
SELECT 44443,'wangwu'
//////////////////////////////////////////////////////////////////////////////////////
批量更新



批量删除:

DELETE FROM MyTable WHERE ID IN (1,2);

批量插入:

INSERT INTO MyTable(ID,NAME) VALUES(1,'123');
INSERT INTO MyTable(ID,NAME) VALUES(2,'456');
INSERT INTO MyTable(ID,NAME) VALUES(3,'789');

第二种方法,使用UNION ALL来进行插入操作:    
INSERT INTO MyTable(ID,NAME)
SELECT 4,'000'
UNION ALL
SELECT 5,'001'
UNION ALL
SELECT 6,'002' ;
据说要比第一种要快!

第三种方法  
INSERT INTO MyTable(ID,NAME) VALUES(7,'003'),(8,'004'),(9,'005');

Example:

表: leafjob(
leafnum INT NOT NULL PRIMARY KEY,
machine VARCHAR(15) );

删除:delete from leafjob where leafnum in (1,2,4);

插入:

INSERT INTO leafjob (leafnum, machine) values(1, 'r1leaf3'), (2, 'r1leaf22');

insert into leafjob(leafnum, machine) select 4,'000' union all select 1,'r1leaf3' union all select 2,'r1leaf22';

insert into leafjob(leafnum, machine) select 1,'r1leaf3' union select 2,'r1leaf22';



update tb_test SET name = 'zhangsan' case id 
                        when '1' then 'yi'
                        when '2' then 'er'
                        when '3' then 'san' 
                        end,
                        address='zhongguo'  case sex 
                        when '女' then 'femail'
                        when '男'  then 'mail'
                        end
                        where **



================================================================
批量插入并更新**[sql]** [view plain]

insert into table (aa,bb,cc) values(xx,xx,xx),(oo,oo,oo) on duplicate key update aa=values(aa),bb=values(bb),cc=values(bb)+values(cc)  

a、更新操作,values后可跟多条记录,主键或唯一值存在,则按最后提供的规则进行更新,规则自定义,cc=values(bb)+values(cc)
 
b、只更新最后添加的字段,bb=values(bb)
 
c、更新时,如果有类似create_date 不为空而且没有默认值的列,需要在key和value中添加,但最后更新的列中不一定包含此列。 ex: insert into table (aa,bb,create_date) values (xx,xx,now()) on duplicate key update aa = values(aa),bb=value(bb)

批量替换更新**[sql]** [view plain](http://blog.csdn.net/luka2008/article/details/39494635#) [copy](http://blog.csdn.net/luka2008/article/details/39494635#)

replace into table (aa,bb,cc) values(xxx,xxx,xxx),(ooo,ooo,ooo),(ccc,ccc,ccc)  

该方式表是要有唯一主键的。原理跟A差不多。判断主键,存在即更新,不存在则插入。 如果只更新其中1、2个字段的时候,不要用这个方法,否则会将其他的字段置空,或者执行前将values值填写完整。
不过该方法有个坑,对于配置有主从服务器的时候,会导致从库的自增主键与主库的自增主键无法保持一致。

区别

a、replace into 操作本质是对重复的记录先delete 后insert,如果更新的字段不全会将缺失的字段置为缺省值。 
b、insert into 则是只update重复记录,不会改变其它字段。
    原文作者:心愿2016
    原文地址: https://www.jianshu.com/p/95d92c97da31
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞