业务场景:需要记入访客的访问情况,但不能重复记入

可以插入前进行判断要插入的数据是否存在业务代码如下 :

INSERT INTO t_topic_vistor(user_id,topic_code) SELECT '218', 'XQ33019920170811142528217' FROM DUAL WHERE NOT EXISTS(SELECT * FROM t_topic_vistor WHERE user_id = 218 and topic_code='XQ33019920170811142528217')
INSERT INTO table(field1, field2, fieldn) SELECT 'field1', 'field2', 'fieldn' FROM DUAL WHERE NOT EXISTS(SELECT field FROM table WHERE field = ?)

前言

在插入数据时,可能需要忽略或替换掉重复的数据(依据某个字段),这时可以在应用层处理,也可以使用复杂的 SQL 语句来处理(如果仅仅知道一些简单的 SQL 语法的话),当然也可以使用一些简单的 SQL 语法,不过它并不是通用所有的数据库类型。

以下所有实例仅针对MySQL而言,并不能随意用于其它数据库

实例

表名称:student

表字段:

Column Name Primary Key Auto Increment Unique
id true true
name true
age

初始表数据:

id name age
1 Jack 18

注:以下所有的示例都需要被插入的数据中需要存在UNIQUE索引或PRIMARY KEY字段,同时这里引入表的主键id,并设置成自动递增,后面可以看到它的变化

1. 不存在则插入,存在则更新

1.1 on duplicate key update

如果插入的数据会导致UNIQUE 索引或PRIMARY KEY发生冲突/重复,则执行UPDATE语句,例:

INSERT INTO `student`(`name`, `age`) VALUES('Jack', 19) ON DUPLICATE KEY  UPDATE `age`=19; -- If will happen conflict, the update statement is executed-- 2 row(s) affected

最新的表数据如下:

id name age
1 Jack 19

1.2 replace into

如果插入的数据会导致UNIQUE 索引或PRIMARY KEY发生冲突/重复,则先删除旧数据再插入最新的数据,例:

REPLACE INTO `student`(`name`, `age`) VALUES('Jack', 18);

-- 2 row(s) affected

这里受影响的行数是2,因为数据库中存在name='Jack'的数据,并且id的值会变成2,因为它是先删除旧数据,然后再插入数据,最新的表数据如下:

id name age
2 Jack 19

2. 避免重复插入

关键字/句:insert ignore into,如果插入的数据会导致UNIQUE索引或PRIMARY KEY发生冲突/重复,则忽略此次操作/不插入数据,例:

INSERT IGNORE INTO `student`(`name`, `age`) VALUES('Jack', 18);

-- 0 row(s) affected

这里已经存在name='Jack'的数据,所以会忽略掉新插入的数据,受影响行数为0,表数据不变。

更多相关文章

  1. Android下Excel的操作
  2. 【Android】文件读写操作(含SDCard的读写)
  3. android 百度地图3.0+常用操作
  4. 转:Android下文件操作模式(含SDCard的读写)
  5. android音频、视频、拍照基础操作
  6. Android之再谈文件操作和SDcard读写
  7. android的文件操作。(未整理完成)
  8. Android中Activity之间访问互传参数
  9. 转:Android之通信录中的联系人操作

随机推荐

  1. linux3.1内核移植到S3C2416的过程和问题
  2. 10.32/10.33 rsync通过服务同步 10.34 li
  3. linux watch——重复执行同一命令
  4. linux 创建子进程
  5. linux diff(differential) 命令详解
  6. Linux串口应用编程
  7. Linux编程(8)_文件IO
  8. 用cmake与OpenCV对ARM进行交叉编译
  9. Fatal error: Call to undefined functio
  10. Linux环境下通过pdb调试Python程序