Mysql插入数据方式(insert into 、replace into解析)

 更新时间:2024年01月04日 14:41:32   作者:pan_mlpan  
这篇文章主要介绍了Mysql插入数据方式(insert into 、replace into解析),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

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 表查询必备:基本操作详解

    MySQL 表查询必备:基本操作详解

    MySQL表基本查询指南,带你轻松掌握SQL查询技巧!无论你是初学者还是老手,都能在本文中找到适合自己的学习内容,让我们一起探索MySQL的世界吧!
    2024-01-01
  • SQL执行步骤的具体分析

    SQL执行步骤的具体分析

    这篇文章主要介绍了SQL执行步骤的具体分析的相关资料,希望通过本文能帮助到大家,让大家理解掌握SQL是如何执行的,需要的朋友可以参考下
    2017-10-10
  • SQL联合查询inner join、outer join和cross join的区别详解

    SQL联合查询inner join、outer join和cross join的区别详解

    今天小编就为大家分享一篇关于SQL联合查询inner join、outer join和cross join的区别详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • MySQL 如何分析查询性能

    MySQL 如何分析查询性能

    这篇文章主要介绍了MySQL 如何分析查询性能,帮助大家更好的理解和学习使用MySQL,感兴趣的朋友可以了解下
    2021-05-05
  • MySQL 案例分析讲解外连接语法

    MySQL 案例分析讲解外连接语法

    数据库的一个难题是无法将SQL语句的执行结果转换为想要的格式。本节,我们将通过学习格式转换中具有代表性的行列转换和嵌套式侧栏的生成方法,深入理解一下其中有重要作用的外连接
    2022-04-04
  • MySQL之索引结构解读

    MySQL之索引结构解读

    这篇文章主要介绍了MySQL之索引结构解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • 解读mysql中的null问题

    解读mysql中的null问题

    这篇文章主要介绍了解读mysql中的null问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • MySQL必备的常见知识点汇总整理

    MySQL必备的常见知识点汇总整理

    这篇文章主要介绍了MySQL必备的常见知识点,结合实例形式汇总整理了mysql各种常见知识点,包括登录、退出、创建、增删改查、事务等知识点与操作注意事项,需要的朋友可以参考下
    2020-05-05
  • 浅谈mysql 系统用户最大文件打开数限制

    浅谈mysql 系统用户最大文件打开数限制

    这篇文章主要介绍了mysql 系统用户最大文件打开数限制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • MySQL索引之聚集索引介绍

    MySQL索引之聚集索引介绍

    在MySQL中,InnoDB引擎表是(聚集)索引组织表(clustered index organize table),而MyISAM引擎表则是堆组织表(heap organize table)
    2015-12-12

最新评论