参考链接:https://blog.csdn.net/tiantang_1986/article/details/78037804

https://blog.csdn.net/woshihaiyong168/article/details/75082668?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

今天本来想插入一条数据,没有这条数据就插入,有这条数据就跟新,但以前的学习中,好像没有碰到过这种情况,就网上查了点资料。笔记学习下。

INSERT IGNORE 这个是插入的时候用的,如果插入的时候,主键冲突,可以用这个IGNORE来避免报错。

mysql> CREATE TABLE xman(name VARCHAR(50) PRIMARY KEY, age INT);

Query OK, 0 rows affected (0.02 sec)

mysql> INSERT ignore INTO xman(name, age) VALUES('sidian',18);

Query OK, 1 row affected (0.01 sec)

mysql> INSERT ignore INTO xman(name, age) VALUES('sidian',18);

Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> INSERT INTO xman(name, age) VALUES('sidian',18);

ERROR 1062 (23000): Duplicate entry 'sidian' for key 'PRIMARY'

经过实测需要插入的字段中有主键或者唯一才能生效.

第二个是我今天主要学习的.

INSERT INTO  ON DUPLICATE KEY UPDATE

mysql> SELECT * FROM xman;

+--------+-----------+------+

| name | addr | age |

+--------+-----------+------+

| sidian | hangzhou | 30 |

| sidian | guangzhou | 30 |

+--------+-----------+------+

2 rows in set (0.00 sec)

mysql> INSERT INTO xman(name,addr,age) VALUES('sidian','jianqiao',35) ON DUPLICATE KEY UPDATE age=50;

Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM xman;

+--------+-----------+------+

| name | addr | age |

+--------+-----------+------+

| sidian | hangzhou | 30 |

| sidian | guangzhou | 30 |

| sidian | jianqiao | 35 |

+--------+-----------+------+

3 rows in set (0.00 sec)

mysql> INSERT INTO xman(name,addr,age) VALUES('sidian','jianqiao',35) ON DUPLICATE KEY UPDATE age=50;

Query OK, 2 rows affected (0.00 sec)

mysql> SELECT * FROM xman;

+--------+-----------+------+

| name | addr | age |

+--------+-----------+------+

| sidian | hangzhou | 30 |

| sidian | guangzhou | 30 |

| sidian | jianqiao | 50 |

+--------+-----------+------+

3 rows in set (0.00 sec)

mysql> SHOW CREATE TABLE xman;

+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

| Table | Create Table |

+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

| xman | CREATE TABLE `xman` (

`name` varchar(100) DEFAULT NULL,

`addr` varchar(100) DEFAULT NULL,

`age` int(11) DEFAULT NULL,

UNIQUE KEY `name` (`name`,`addr`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 |

+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

1 row in set (0.00 sec)

mysql>

从上面的测试可以看出来,在插入的时候,主要是根据唯一的索引来判断是否升级,如果唯一索引冲突了,执行后面的 UPDATE

如果条件比较复杂,可以设置多字段的唯一属性。

最后是一个REPLACE INTO,就是把INSERT 换成了REPLACE。

mysql> SELECT * FROM xman;

+--------+-----------+------+--------+

| name | addr | age | hobby |

+--------+-----------+------+--------+

| sidian | hangzhou | 30 | 唱歌 |

| sidian | guangzhou | 30 | 唱歌 |

| sidian | jianqiao | 50 | 唱歌 |

+--------+-----------+------+--------+

3 rows in set (0.00 sec)

mysql> REPLCAE INTO xman VALUES('sidian','hangzhou',99);

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'REPLCAE INTO xman VALUES('sidian','hangzhou',99)' at line 1

mysql> REPLACE INTO xman VALUES('sidian','hangzhou',99);

ERROR 1136 (21S01): Column count doesn't match value count at row 1

mysql> REPLACE INTO xman VALUES('sidian','hangzhou',99,'跳舞');

Query OK, 2 rows affected (0.00 sec)

mysql> REPLACE INTO xman VALUES('sidian','hangzhou2',99,'跳舞');

Query OK, 1 row affected (0.00 sec)

mysql> REPLACE INTO xman SET name='8sidian';

Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM xman;

+---------+-----------+------+--------+

| name | addr | age | hobby |

+---------+-----------+------+--------+

| sidian | hangzhou | 99 | 跳舞 |

| sidian | guangzhou | 30 | 唱歌 |

| sidian | jianqiao | 50 | 唱歌 |

| sidian | hangzhou2 | 99 | 跳舞 |

| 8sidian | NULL | NULL | NULL |

+---------+-----------+------+--------+

5 rows in set (0.00 sec)

mysql> REPLACE INTO xman SET name='sidian', addr='hangzhou';

Query OK, 2 rows affected (0.00 sec)

mysql> SELECT * FROM xman;

+---------+-----------+------+--------+

| name | addr | age | hobby |

+---------+-----------+------+--------+

| sidian | hangzhou | NULL | NULL |

| sidian | guangzhou | 30 | 唱歌 |

| sidian | jianqiao | 50 | 唱歌 |

| sidian | hangzhou2 | 99 | 跳舞 |

| 8sidian | NULL | NULL | NULL |

+---------+-----------+------+--------+

5 rows in set (0.00 sec)

mysql>

REPLACE同样也实根据唯一的索引来判断是否重复,但他比较狠的是,如果发现了位置索引冲突就把老的删除了,然后把新的用上。

感觉下来还实ON DUPLICATE KEY 比较好一点

mysql 新增更新_MySQL新增数据,存在就更新,不存在就添加(转帖加实测)相关推荐

  1. mysql数据存在就更新_Mysql:如果数据存在则更新,不存在则插入

    mysql语法支持如果数据存在则更新,不存在则插入,首先判断数据存在还是不存在的那个字段要设置成unique索引, 例如表tb_addrbook如下: 索引: 语句1:不存在插入 INSERT INT ...

  2. mysql c 更新 数据_Mysql:如果数据存在则更新,不存在则插入

    本篇文章转载自:https://www.cnblogs.com/Eric-zhao/p/6655994.html mysql语法支持如果数据存在则更新,不存在则插入,首先判断数据存在还是不存在的那个字 ...

  3. mysql 随机update_MySQL随机查询数据与随机更新数据

    以下的文章主要讲述的是MySQL随机查询数据.MySQL随机更新数据的实际应用以及对MySQL随机查询数据.MySQL随机更新数据的实际应用代码的描述,以下就是文章的主要内容描述,望你会有所收获. M ...

  4. mysql update 联合更新_Mysql update多表联合更新的方法小结

    下面我建两个表,并执行一系列sql语句,仔细观察sql执行后表中数据的变化,很容易就能理解多表联合更新的用法 student表 class表 1. 执行 UPDATE student s , clas ...

  5. mysql循环更新_MySql多表循环遍历更新

    先给大家解释解释发表这篇博文的主要思想是: MySql数据库中存在大量的表结构,而且这些表都存在一个共同点,就是表中都有相同字段,比如id,name,city,adress,lat,lng.表中字段i ...

  6. java mysql 清空表_MySQL 删除数据表

    MySQL 删除数据表 MySQL中删除数据表是非常容易操作的, 但是你再进行删除表操作时要非常小心,因为执行删除命令后所有数据都会消失. 语法 以下为删除MySQL数据表的通用语法: DROP TA ...

  7. linux mysql load_file语句_mysql导入数据load data infile用法

    我的文章一般浅显易懂,不会搞那么深入让大家很难理解.(其实我水平也不咋样) LOAD DATA INFILE 一直被认为是MySQL很强大的一个数据导入工具,因为他速度非常的快. 不过有几个问题一定要 ...

  8. mysql timestamp 转型_MySQL的timestamp类型自动更新问题【转】

    今天建了一个表,里面有一个列是timestamp类型,我本意是在数据更新时,这个字段的时间能自动更新.岂知对这个类型的值还不甚了解,导致出错.发现这个字段只是在这行数据建立的时候有值,在更新的却无变化 ...

  9. mysql begin end 批量更新_MySql中4种批量更新的方法

    1.replace into 批量更新 replace into test_tbl (id,dr) values (1,'2'),(2,'3'),...(x,'y');例: replace into ...

最新文章

  1. NetBeans常用快捷键
  2. R语言可视化包ggplot2绘制平滑曲线、回归线实战:geom_smooth() 函数
  3. 一位人工智能总监对AI行业的【实话实说】
  4. C# Excel导出超出65536行报错 Invalid row number (65536) outside allowable range (0..65535)解决方法
  5. 逻辑回归的向量化实现样例
  6. Hypertable hbase hdfs kfs java与c++的较量
  7. 去掉softmax后Transformer会更好吗?复旦华为诺亚提出SOFT
  8. Qt Creator将应用程序部署到Android设备
  9. springmvc的ModelAttribute注解
  10. RAID 6 vs. RAID 10
  11. location.host与location.hostname和跨浏览器的兼容性?
  12. [转]在这新站如何在一天内被Google和百度收录
  13. linux给wps安装字体
  14. 账龄分析表excel模板_智能考勤表excel表模板
  15. 可以看计算机专业书籍的app,分享两个好用的读书APP
  16. autojs的使用文档
  17. COSCon'20 Apache Roadshow- China 精彩收官!|城市回顾篇
  18. matlab常用逻辑运算
  19. 有机化学反应里php什么意思,有机反应类型解读
  20. 小白学渗透——渗透测试基本流程

热门文章

  1. Atitit.木马病毒自动启动-------------win7计划任务的管理
  2. Oracle 基础篇 --- 表空间的操作
  3. Thinkphp动态切换主题
  4. Map Join介绍及案例
  5. python顺序执行多个py文件的方法
  6. Spark Streaming VS Flink Streaming
  7. 《SQL Server 2012 T-SQL基础》读书笔记 - 1.背景
  8. 1020. Tree Traversals (25)
  9. 基于VLC的播放器开发
  10. plsql developer导出csv乱码问题