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,...);

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 LIMIT 5;

插入成功。此时表中的数据: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 会直接插入数据,这将导致表中出现重复的数据。

题外话

小潘的个人微信公众号【小潘学程序】,有兴趣可给个关注~

一起学习,一起成长

Mysql 之 插入数据(insert into 、 replace into 解析)相关推荐

  1. MySQL:插入数据insert ignore,重复数据自动忽略

    MySQL中插入数据,如果插入的数据在表中已经存在(主键或者唯一键已存在),使用insert ignore 语法可以忽略插入重复的数据. 1.insert ignore 语法 insert ignor ...

  2. python mysql批量insert数据_使用python往mysql批量插入数据时,报错not all arguments converted...

    我用这段命令可以往mysql数据库插入数据 insert into moderation_task(id, media_id, user_id, media_url_or_path, media_ti ...

  3. mysql如何防止插入重复数据_防止MySQL重复插入数据的三种方法

    新建表格 CREATE TABLE `person` ( `id` int NOT NULL COMMENT '主键', `name` varchar(64) CHARACTER SET utf8 C ...

  4. mysql 禁止插入重复数据_防止MySQL重复插入数据的三种方法

    新建表格 CREATE TABLE `person` ( `id` int NOT NULL COMMENT '主键', `name` varchar(64) CHARACTER SET utf8 C ...

  5. python往mysql存入数据_Python操作mysql之插入数据

    之前有写过一篇python查询mysql数据的文章,今天写通过python插入数据到mysql数据库. 相关mysql视频教程推荐:<mysql教程> 先建库,建表,建用户mysql> ...

  6. mysql 批量插入数据方法_mysql大批量插入数据的4种方法示例

    前言 本文主要给大家介绍了关于mysql大批量插入数据的4种方法,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 方法一:循环插入 这个也是最普通的方式,如果数据量不是很大,可以使用, ...

  7. Mysql批量插入数据问题解决和优化

    Mysql批量插入数据问题解决和优化 一.问题描述 项目中mysql批量插入大概50000左右数据,使用事务和批量,但是速度依旧很慢,大约60s左右,迫切希望改进这个问题. 二.问题原因 尽管是批量a ...

  8. python向数据库写入数据_如何用Python向Mysql中插入数据

    我们使用Python经常会和Postgresql进行搭配,很少将python和mysql进行搭配.下面小编给大家分享如何用Python向Mysql中插入数据. 工具/原料 Pycharm 方法/步骤 ...

  9. mybatis向mysql数据库插入数据时,中文乱码显示为?解决方法

    mybatis向mysql数据库插入数据时,中文乱码显示为?解决方法 1.先查看库.表.表字符字段的编码格式.MySQL默认的库和表的字符编码都是latin1,而我们一般需要使用 utf8 //先查看 ...

最新文章

  1. RabbitMQ 入门系列(1)— Ubuntu 安装 RabbitMQ 及配置
  2. HtmlGenericControl
  3. Pytorch 张量tensor
  4. ie11java阻止_企业IT管理员IE11升级指南【10】—— 如何阻止IE11的安装
  5. 基于ZYNQ FPGA实现图像采集存储显示
  6. 你应该知道的一些 ADB 命令
  7. javafx button按钮分组突出选中按钮(ToggleButton)
  8. 五种常见的linux系统有哪些,常见的Linux操作系统有哪些
  9. 读计算机基础知识心得体会1000字,计算机学习个人心得体会1000字.doc
  10. 基于线性函数近似的安全强化学习 Safe RL with Linear Function Approximation 翻译 2
  11. Matlab中关于复杂函数二重积分的问题
  12. MySQL系列——MySQL实现序列(Sequence)效果
  13. ffmpeg 图片序列转视频
  14. Java程序员最喜欢的11款免费IDE编辑器
  15. 排队器拦截_网络拦截器-一个好用的网络拦截器
  16. vue3路由切换时的动画效果
  17. [数据统计]百度在调低索引库的容量
  18. access 2003 取消数据库密码
  19. 论文解读:DETR 《End-to-end object detection with transformers》,ECCV 2020
  20. 世界上最遥远的距离是我在百度大厦,你在百度新大厦

热门文章

  1. Vue2.6+VueCli4.3+CubeUI 完成小D课堂移动端
  2. 优动漫PAINT简简单单绘画绣球花
  3. python 日期解析_如何在Python中解析ISO 8601格式的日期?
  4. LLCC68低功耗Sub-GHz LoRa射频收发器LLCC68IMLTRT
  5. 关于写作编辑器markdown与它的编辑工具,我想说...
  6. 分书问题(book)-C++
  7. 海尔转型启示录:制造业细分市场大有可为
  8. C/C++项目分享——鸣人释放技能螺旋丸
  9. 2021年项城一高理科高考成绩查询,项城一高举行2021年高考壮行大会
  10. UEFI 基础教程 (一) - 运行第一个APP HelloWorld