Mysql之插⼊数据(insertinto、replaceinto解析)
Mysql 插⼊数据
1、插⼊数据⽅法
mysql中常⽤的三种插⼊数据的语句:
insert into:正常的插⼊数据,插⼊数据的时候会检查主键或者唯⼀索引,如果出现重复就会报错;
replace into:表⽰插⼊并替换数据,若表中有primary key或者unique索引,在插⼊数据的时候,若遇到重复的数据,则⽤新数据替换,如果没有数据效果则和insert into⼀样;
insert ignore into:插⼊并忽略数据,如果中已经存在相同的记录,则忽略当前新数据。这样不⽤校验是否存在了,有则忽略,⽆则添加
2、语法介绍
2.1 insert into
每个字段与其值是严格⼀⼀对应的。也就是说:每个值、值的顺序、值的类型必须与对应的字段相匹配。
但是,各字段也⽆须与其在表中定义的顺序⼀致,它们只要与 VALUES中值的顺序⼀致即可。
语法如下:
# 表中有些字段有默认值,则可以直接根据字段插⼊数据
INSERT INTO表名(字段名1,字段名2,...)VALUES(值1,值2,...);
# 按照表中所有字段进⾏插⼊数据,⼀定要与字段在表中定义的顺序⼀致
INSERT INTO表名VALUES(值1,值2,...);
insert语句字段顺序2.2 insert ignore into
这种⽅式的语法跟insert into 是⼀样的,只不过在遇到重复的数据时做出的处理不⼀致,有重复的就忽略该条数据的插⼊
语法如下:
# 表中有些字段有默认值,则可以直接根据字段插⼊数据
INSERT IGNORE INTO表名(字段名1,字段名2,...)VALUES(值1,值2,...);
# 按照表中所有字段进⾏插⼊数据,⼀定要与字段在表中定义的顺序⼀致
INSERT IGNORE INTO表名VALUES(值1,值2,...);
题外:
MySQL ⾃4.1版以后开始⽀持INSERT … ON DUPLICATE KEY UPDATE语法,对于插⼊数据时候遇到重复的primary key 时候,可以进⾏数据的更新,就避免了insert ignore into遇到重复的数据直接忽略的不⾜。但是⼀定要保证使⽤的时候是想要更新重复数据哦,不然就尴尬啦~~
INSERT … ON DUPLICATE KEY UPDATE
2.3 replace into
3、使⽤⽰例
初始表准备:
创建⼀个study 表, id 是⾃增主键
CREATE TABLE study(
ID INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20)NOT NULL,
AGE INT(10)
);
⾸先插⼊⼀些为⽅便测试的数据:
INSERT INTO study VALUES(1,'a',10);
INSERT INTO study VALUES(2,'b',11);
INSERT INTO study VALUES(3,'c',12);
INSERT INTO study VALUES(4,'d',13);
INSERT INTO study VALUES(5,'e',14);
INSERT INTO study VALUES(6,'f',15);
此时查询:
select*from study
开始测试:
(⼀)测试insert into
例如,现在再插⼊id 为 1 的数据与id为7的数据
INSERT INTO study VALUES(1,'a',11);
INSERT INTO study VALUES(7,'g',16);
结果:
INSERT INTO study VALUES(1,'a',11);
/* SQL错误(1062):Duplicate entry '1' for key 'PRIMARY' */
/* 受影响记录⾏数: 0  已到记录⾏: 0  警告: 0  持续时间 0 的 2 条查询: 0.000 秒. */报错。此时表中的数据:id 为 7的数据是没有插⼊成功的
(⼆)测试insert ignore into
例如,做同样的事情,现在再插⼊id 为 1 的数据与id为7的数据
INSERT INTO study VALUES(1,'a',11);
INSERT INTO study VALUES(7,'g',16);
结果:
INSERT IGNORE INTO study VALUES(1,'a',11);
INSERT IGNORE INTO study VALUES(7,'g',16);
/* 受影响记录⾏数: 1  已到记录⾏: 0  警告: 1  持续时间 3 条查询: 0.062 秒. */
SHOW WARNINGS LIMIT5;
插⼊成功。此时表中的数据:id 为 7的数据是插⼊成功,⽽id为1的数据也并没有更新
(三)测试 INSERT … ON DUPLICATE KEY UPDATE
例如,做同样的事情,现在再插⼊id 为 1 的数据与id为8的数据
INSERT INTO study VALUES(1,'a',11)ON DUPLICATE KEY UPDATE age =12;
INSERT INTO study VALUES(8,'h',16)ON DUPLICATE KEY UPDATE age =13;
结果:
INSERT INTO study VALUES(1,'a',11)ON DUPLICATE KEY UPDATE age =12;
INSERT INTO study VALUES(8,'h',16)ON DUPLICATE KEY UPDATE age =13;
/* 受影响记录⾏数: 3  已到记录⾏: 0  警告: 0  持续时间 2 条查询: 0.015 秒. */
插⼊成功。此时表中的数据:id 为 1 的 因为存在所以数据被更新了,⽽id为8 之前并没有,所以其数据也并没有更新
(四)测试 replace into
经过上⾯的操作,⽬前的表数据由上图所⽰。
例如,做同样的事情,现在再插⼊id 为 1 的数据与id为9的数据。
REPLACE INTO study VALUES(1,'a',11);
REPLACE INTO study VALUES(9,'i',18);
结果:
REPLACE INTO study VALUES(1,'a',11);
REPLACE INTO study VALUES(9,'i',18);
/* 受影响记录⾏数: 3  已到记录⾏: 0  警告: 0  持续时间 3 条查询: 0.000 秒. */
插⼊成功。此时表中的数据:id 为 1 的 因为存在所以数据被更新为了11,⽽id为9 之前并没有,所以其数据也并没有更新
注意的是:插⼊数据的表必须有主键或者是唯⼀索引!否则的话,replace into 会直接插⼊数据,这将导致表中出现重复的数据。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。