insert 语句中不能使用where,所以如果需要根据插入的数据在已有的数据库表是否重复做一些操作可以使用下面三种方法:

1. 使用insert,捕获duplicate错误

2. insert into ... on duplicate key update. 如果重复,执行update

3. insert ignore, 抛出警告而不是错误

eg. for insert into ... on duplicate key update

mysql 插入数据,如果存在,更新

INSERT INTO subs
(subs_name, subs_email, subs_birthday)
VALUES
(?, ?, ?)
ON DUPLICATE KEY UPDATE
subs_name = VALUES(subs_name),
subs_birthday = VALUES(subs_birthday)

如果批量操作,使用python:

sql = "insert into <table_name> (start_time, name) values(%(start_time)s, %(name)s) on DUPLICATE KEY UPDATE stat_time = values(start_time), name = values(name)"

mysql_conn.executemany(sql, data)  # data is a list of dict, for method to insert batch of tuple, google it.

eg. for insert ignore

插入数据,如果存在,使用insert ignore忽略:

INSERT IGNORE INTO <table_name> (subs_name, subs_email, subs_birthday) values ("Tom", "Tom@jerry.com", "1900");

另一个方案:

IF NOT EXISTS(SELECT * FROM myTable WHERE Email=@Email) THEN INSERT INTO blah blah

ref: https://stackoverflow.com/questions/15383852/sql-if-exists-update-else-insert-into

https://stackoverflow.com/questions/285937/is-it-possible-to-insert-a-row-but-only-if-a-value-does-not-already-exist/285980#285980

mysql insert on duplicate key, update, ignore的更多相关文章

  1. mysql INSERT ... ON DUPLICATE KEY UPDATE语句

    网上关于INSERT ... ON DUPLICATE KEY UPDATE大多数文章都是同一篇文章转来转去,首先这个语法的目的是为了解决重复性,当数据库中存在某个记录时,执行这条语句会更新它,而不存 ...

  2. mysql 插入重复值 INSERT ... ON DUPLICATE KEY UPDATE

    向数据库插入记录时,有时会有这种需求,当符合某种条件的数据存在时,去修改它,不存在时,则新增,也就是saveOrUpdate操作.这种控制可以放在业务层,也可以放在数据库层,大多数数据库都支持这种需求 ...

  3. Mysql中INSERT ... ON DUPLICATE KEY UPDATE的实践

    转: Mysql中INSERT ... ON DUPLICATE KEY UPDATE的实践 阿里加多 0.1 2018.03.23 17:19* 字数 492 阅读 2613评论 2喜欢 1 一.前 ...

  4. MySQL的INSERT ··· ON DUPLICATE KEY UPDATE使用的几种情况

    在MySQL数据库中,如果在insert语句后面带上ON DUPLICATE KEY UPDATE 子句,而要插入的行与表中现有记录的惟一索引或主键中产生重复值,那么就会发生旧行的更新:如果插入的行数 ...

  5. INSERT ... ON DUPLICATE KEY UPDATE Syntax

    一 mybatis中返回自动生成的id 当有时我们插入一条数据时,由于id很可能是自动生成的,如果我们想要返回这条刚插入的id怎么办呢.在mysql数据中我们可以在insert下添加一个selectK ...

  6. INSERT ... ON DUPLICATE KEY UPDATE Syntax 专题

    ON DUPLICATE KEY UPDATE :不用用于批量,除 insert into t1  select * from t2 on duplicated key update k1=v1,k2 ...

  7. MySql之on duplicate key update详解

    在我们的日常开发中,你是否遇到过这种情景:查看某条记录是否存在,不存在的话创建一条新记录,存在的话更新某些字段.你的处理方式是不是就是按照下面这样? $result = mysql_query('se ...

  8. MySQL中ON DUPLICATE KEY UPDATE使用

    今天做推断插入用到了MySQL中ON DUPLICATE KEY UPDATE,如今Mark下面! 假设你想做到数据库中没有数据的话插入数据.有数据的话更新数据,那么你能够选择ON DUPLICATE ...

  9. 死锁问题------------------------INSERT ... ON DUPLICATE KEY UPDATE*(转)

    前言    我们在实际业务场景中,经常会有一个这样的需求,插入某条记录,如果已经存在了则更新它如果更新日期或者某些列上的累加操作等,我们肯定会想到使用INSERT ... ON DUPLICATE K ...

随机推荐

  1. centos7 添加用户并授权root权限

    centos7.2 版本,我们不可能每次都用root账号登陆,root账号公认的不安全,所以,首先,禁止掉root账号的登陆.1.静止root账号登陆. $ vi /etc/ssh/sshd.conf ...

  2. 【转】每天一个linux命令(14):head 命令

    原文网址:http://www.cnblogs.com/peida/archive/2012/11/06/2756278.html head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头 ...

  3. mac 使用

    普通键盘操作mac电脑,快捷键: 快捷键 功能 ctrl + a 到行首 ctrl + e 到行尾 ctrl + up 打开任务控制(窗口平铺) window + tab 选择任务 ctrl + le ...

  4. 嵌入式QT应用的窗口大小、位置,QtreeStack的样式

    1.    窗口固定大小 :this->setFixedSize(452,244); 2.窗口固定位置(经试验,触摸屏的鼠标事件不能有效使用) oldPos.setX((800-452)/2); ...

  5. Oracle VM VirtualBox 虚拟机 常用快捷键

    右Ctrl+C :放大或缩小 右Ctrl+F :全屏 右Ctrl+Delete :登录 知道上面的其他就都知道了

  6. opencv中的图像形态学——腐蚀膨胀

    腐蚀膨胀是图像形态学比较常见的处理,腐蚀一般可以用来消除噪点,分割出独立的图像元素等. 一般腐蚀操作对二值图进行处理,腐蚀操作如下图,中心位置的像素点是否与周围领域的像素点颜色一样(即是否是白色点,即 ...

  7. 【jmeter】jmeter聚合报告之90%Line参数说明

    其实要说明这个参数的含义非常简单,可能你早就知道他的含义,但我对这个参数一直有误解,而且还一直以为是“真理”,原于一次面试,被问到了这个问题,所以引起我这个参数的重新认识. 先说说我错误的认识: 我一 ...

  8. Oracle 10g下emctl start dbconsole 报错:OC4J Configuration issue 问题解决

    http://blog.sina.com.cn/s/blog_95b5eb8c0100x4a7.html http://blog.csdn.net/sz_bdqn/article/details/17 ...

  9. Postgresql 创建账户,修改密码

    sudo su postgres psql \password postgres输入密码\q 本机调试的时候,最好在装完以后添加一个pgsql的管理员帐号,否则phppgadmin不让登陆 创建用户 ...

  10. java 抽象类 以及模块方法设计模式,接口

    模块方法设计模式: 可以实现多接口 接口可以继承接口 接口与接口之间可以多继承.类与类之间不行