MySQL INSERT插入条件判断:如果不存在则插入

摘要: 我们经常需要进行sql的批量插入,要求:该条记录不存在则插入,存在则不插入。如果使用一条INSERT语句实现呢?

普通的 INSERT INTO 插入:

INSERT INTO card(cardno, cardnum) VALUES(‘1111‘, ‘100‘);
INSERT INTO card(cardno, cardnum) VALUES(‘2222‘, ‘200‘);
...

对于普通的 INSERT 插入,如果想要保证不插入重复记录,我们只有对某个字段创建唯一约束实现(比如:cardno卡号不能重复);

那有没有不创建唯一约束,仅通过 INSERT INTO 一条语句实现的方案呢?

答案:有的, INSERT INTO IF EXISTS 具体语法如下:

INSERT INTO table(field1, field2, fieldn) SELECT ‘field1‘, ‘field2‘, ‘fieldn‘ FROM DUAL WHERE NOT EXISTS(SELECT field FROM table WHERE field = ?)

其中的 DUAL 是一个临时表,不需要物理创建,这么用即可。

针对上面的card示例的改造如下:

INSERT INTO card(cardno, cardnum) SELECT ‘111‘, ‘100‘ FROM DUAL WHERE NOT EXISTS(SELECT cardno FROM card WHERE cardno = ‘111‘);
INSERT INTO card(cardno, cardnum) SELECT ‘222‘, ‘200‘ FROM DUAL WHERE NOT EXISTS(SELECT cardno FROM card WHERE cardno = ‘222‘);

搞定!

时间: 2024-10-09 21:28:03

MySQL INSERT插入条件判断:如果不存在则插入的相关文章

MYSQL数据类型和where条件判断

MySQL中常见的数据类型 一.字符型 ① CHAR(N):固定N个字符长度的字符串,如果长度不够自动空格补齐; N的范围 0~255 ② VARCHAR(N): 存储可变长度的字符串,最常用 ③ TEXT: 存储可变长度的字符串,(常用于发布文章等大段内容) ④ TINYTEXT:0~2^8-1 *10 ⑤ MEDIUMTEXT: 0~2^24-1 *10^3; ⑥ LONGTEXT: 0~2^32-1 * 10^4;二.整形: ① TINYINT: 无符号0~2^8-1 有符号 -2^7 ~

MySQL条件判断处理函数_20160925

MySQL条件判断处理 一.假如我想把salesperson 分成 5组,计算每个销售分组的业绩 首先先将销售分组 1 SELECT *, 2 CASE 3 WHEN salesperson IN ("丁test","何test","刘test","叶test","夏test") THEN "销售一组" 4 WHEN salesperson IN ("姚test",&

oracle语句insert into select如何加后续插入条件

oracle语句insert into select如何加后续插入条件 2014-01-21 10:48匿名  分类:其他编程语言 | 浏览 2746 次 oracle中有批量插入语句insert into tableA (列1,列2,列3) select 列1,列2 from tableB.现在问题是这样的,tableA有3列,而通过最后的select语句所能获得的列只有列1和列2.但列3是非空的,所以插入时必须填写.请问在此如何在此语句后面加SQL以完成插入??小弟跪谢了!!! A中有3例,

mysql insert插入时实现如果数据表中主键重复则更新,没有重复则插入的四种方法

[CSDN下载] Powerdesigner 设计主键code不能重复等问题 [CSDN博客] Oracle中用一个序列给两个表创建主键自增功能的后果 [CSDN博客] MySQL自增主键删除后重复问题 [CSDN博客] mysql 主从复制 双主从复制原理 防止主键重复问题(必看) [CSDN博客] replace into导致mysql自增列导致主键重复问题分析 [CSDN博客] 一个循环更新某库所有表所有非主键列的值方法(sql 2005 & mysql) [CSDN博客] mysql i

Mysql条件判断函数使用-选择两列中较大一列数据

今天看到了一道题,简单讲就是核心问题,表t中有两列a,b,使用sql实现:当a>b时,选择a列,否则选择b列. 之前工作中也遇到类似问题,需要使用Mysql条件判断函数IF或者CASE. IF函数的语法是 :IF(expr,v1,v2),如果表达式expr是true(expr<>0 and expr <> NULL),则函数返回v1,反之返回v2. 所以这道题可以这么写: select IF(a>b, a , b) from t; CASE函数:CASE expr WH

mysql insert锁机制【转】

最近再找一些MySQL锁表原因,整理出来一部分sql语句会锁表的,方便查阅,整理的不是很全,都是工作中碰到的,会持续更新 笔者能力有限,如果有不正确的,或者不到位的地方,还请大家指出来,方便你我,方便大家. 此测试环境 Mysql 5.5 基于innodb 引擎 [sql] view plain copy insert into  table1 values select  … from table2 …. 此种方法,会锁table2 [sql] view plain copy delete t

初识python(条件判断、循环控制、循环次数限制、常用数据类型、字符串格式化、列表常用操作、二进制运算、嵌套循环)

第一天学习 1.pycharm使用遇到的问题: 如果想运行程序A,一定要右键去执行程序A,而不能直接左下角run,那样的话可能会出现运行之前其他程序 pycharm小技巧: 1.多行全选,shift+tab整体往前缩进一个tab 2.多行全选,tab整体向后缩进一个tab 3.多行全选,ctrl+/注释所选代码,再次按ctrl+/注释取消所选代码 4.pycharm中切换3.5和2.7:file菜单-settings-project pycharmPreject--project interpr

linux下mysql Insert update delete 事务 用户管理

linux下mysql Insert update delete  事务 用户管理 1.INSERT插入语句格式: INSERT INTO tb_name (字段1, 字段2, ...) VALUES (值1,值2, ...)[,(值1, 值2, ...),...]; INSERT INTO 表名 SET 字段1=值1,字段2=值2,...; INSERT INTO 表名 (字段1,字段2,...) SELECT (字段1,字段2,...) FROM 表名 [WHERE 条件]; 2.REPLA

Python基础--使用list和tuple+条件判断

list list是一种有序的集合,可以随时添加和删除其中的元素.跟java不一样的是 可以使用arr[-1] 0>-x >=- len(arr) 索引的数字为 0~ len(arr)-1 -len(arr)~ -1 超过会报错 classmates= ['A','B','C','D','E'] print(classmates) print(len(classmates)) for i in classmates: print(i) ''' ['A', 'B', 'C', 'D', 'E']