MySQL中⼏种插⼊和批量语句实例详解
⽬录
前⾔
1.insert ignore into
< duplicate key update
4.insert if not exists
5.批量插⼊数据
6.批量更新
总结
前⾔
最常见的⽅式就是为字段设置主键或唯⼀索引,当插⼊重复数据时,抛出错误,程序终⽌,但这会给后续处理带来⿇烦,因此需要对插⼊语句做特殊处理,尽量避开或忽略异常,下⾯我简单介绍⼀下,感兴趣的朋友可以尝试⼀下:
这⾥为了⽅便演⽰,我新建了⼀个user测试表,主要有id,username,sex,address这4个字段,其中主键为id(⾃增),同时对username字段设置了唯⼀索引(idx_username)
1.insert ignore into
即插⼊数据时,如果数据存在,则忽略此次插⼊,前提条件是插⼊的数据字段设置了主键或唯⼀索引,测试SQL语句如下,当插⼊本条数据时,MySQL数据库会⾸先检索已有数据(也就是idx_username索引),如果存在,则忽略本次插⼊,如果不存在,则正常插⼊数据:
INSERT IGNORE INTO user (username,sex,address) VALUES ('hanpang','boy','HongKong')
< duplicate key update
即插⼊数据时,如果数据存在,则执⾏更新操作,前提条件同上,也是插⼊的数据字段设置了主键或唯⼀索引,测试SQL语句如下,当插⼊本条记录时,MySQL数据库会⾸先检索已有数据(idx_username索引),如果存在,则执⾏update更新操作,如果不存在,则直接插⼊:
INSERT IGNORE INTO user (username,sex,address) VALUES ('hanpang','boy','HongKong')
on duplicate key update
SEX='boy',address='HongKong'
即插⼊数据时,如果数据存在,则删除再插⼊,前提条件同上,插⼊的数据字段需要设置主键或唯⼀索引,测试SQL语句如下,当插⼊本条记录时,MySQL数据库会⾸先检索已有数据(idx_username索引),如果存在,则先删除旧数据,然后再插⼊,如果不存在,则直接插⼊:
REPLACE INTO user (username,sex,address) VALUES ('hanpang','boy','HongKong')
4.insert if not exists
即 insert into … select … where not exist ... ,这种⽅式适合于插⼊的数据字段没有设置主键或唯⼀索引,当插⼊⼀条数据时,⾸先判断MySQL数据库中是否存在这条数据,如果不存在,则正常插⼊,如果存在,则忽略:
INSERT INTO user (username,sex,address)
SELECT 'hanpang','boy','HongKong' FROM user
WHERE NOT EXISTS (SELECT username FROM user WHERE username='hanpang')
5.批量插⼊数据
上述的插⼊语句,是可以使⽤批量插⼊语句,表数据结构:
CREATE TABLE example (
example_id INT NOT NULL,
name VARCHAR( 50 ) NOT NULL,
value VARCHAR( 50 ) NOT NULL,
other_value VARCHAR( 50 ) NOT NULL
)
个⼈习惯使⽤这种批量操作⽅式,进⾏SQL语句拼接,但是当你的字符串太长(百万数据)的时候,需要你对mysql设置指令:
INSERT INTO example
VALUES
(100, 'Name 1', 'Value 1', 'Other 1'),
(101, 'Name 2', 'Value 2', 'Other 2'),
(102, 'Name 3', 'Value 3', 'Other 3'),
(103, 'Name 4', 'Value 4', 'Other 4');
实际开发中,我们更加喜欢使⽤通过程序代码进⾏批量添加操作(使⽤事务提交,批量插⼊数据库),使⽤上述的⽅式在插⼊测试数据或者其他低要求时⽐较合适,速度确实快。
6.批量更新
(1)replace into 批量更新(记得要有主键或者索引)
INSERT INTO example
VALUES
(100, 'Name 1', 'Value 1', 'Other 1'),
(101, 'Name 2', 'Value 2', 'Other 2'),
(102, 'Name 3', 'Value 3', 'Other 3'),
(103, 'Name 4', 'Value 4', 'Other 4');
(2)insert into ...on duplicate key update批量更新
使⽤INSERT的时候有表T(id,A,B,C,D)
插⼊的时候希望通过A,B索引唯⼀记录,有重复的时候更新C,D
INSERT INTO T(A,B,C,D) VALUES (a,b,c,d) ON DUPLICATE KEY UPDATE C=C+1,D=d
(3)使⽤mysql ⾃带的语句构建批量更新
UPDATE yoiurtable
SET dingdan = CASE id
WHEN 1 THEN 3
WHEN 2 THEN 4
WHEN 3 THEN 5
END
WHERE id IN (1,2,3)
(4)创建临时表,先更新临时表,然后从临时表中update
create temporary table tmp(id int(4) primary key,dr varchar(50));
insert into tmp values (0,'gone'), (1,'xx'),...(m,'yy');
update test_tbl, tmp set test_tbl.dr=tmp.dr where test_tbl.id=tmp.id;
总结
到此这篇关于MySQL中⼏种插⼊和批量语句的⽂章就介绍到这了,更多相关MySQL插⼊和批量语句内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!批量更新sql语句
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论