zoukankan      html  css  js  c++  java
  • MYSQL:插入记录检查记录是否存在,存在则更新,不存在测插入记录SQL

    我们在开发数据库相关的逻辑过程中, 经常检查表中是否已经存在这样的一条记录, 如果存在则更新或者不做操作, 如果没有存在记录,则需要插入一条新的记录。

    这样的逻辑固然可以通过两条sql语句完成。

    SELECT COUNT(*) FROM xxx WHERE ID=xxx;

    if (x == 0)

        INSERT INTO xxx VALUES;

    else

        UPDATE xxx SET ;

    但是这样操作在性能上有所损失, 代码结构感觉有点丑陋。

    官方文档如下:

    MySQL provides many extentions to SQL which help performance in many common use scenarios. Among these are INSERT ... SELECTINSERT ... ON DUPLICATE KEY UPDATE, and REPLACE.

    重要的就是上面提到的 :

    INSERT ... SELECT

    INSERT ... ON DUPLICATE KEY UPDATE

    INSERT ... ON DUPLICATE REPLACE

    比如想往表中插入一条数据,如果表中没有该条数据才插入,如果已经存在该条数据就不插入。

    首先,在创建表时,将不需要重复的字段设置为unique,然后在插入时,使用insert ignore语句。

    例如:(数据库用的是mysql5)
    创建一张表用来存储用户:
    create table user_info
    (
       uid mediumint(10) unsigned NOT NULL auto_increment primary key,
       last_name char(20) not null,
       first_name char(20) not null,
       unique ( last_name, first_name)
    );
    alter table anser add UNIQUE (last_name,first_name)
    插入数据:
    insert ignore into user_info (last_name,first_name) values ('x','y');
    这样一来,如果表中已经存在last_name='x'且first_name='y'的数据,就不会插入,如果没有就会插入一条新数据。

    上面的是一种用法, 也可以用REPLACE 来实现。

    其实MySQL提供了可以在一个SQL语句中完成上述逻辑的支持。

  • 相关阅读:
    iOS9--适配系列教程(原文/译文)
    电梯调度设计思路及算法
    10大高频率单词筛选
    html知识点总结
    关于博客
    Java构造器内部的多态方法
    Java初学者必学的六大Java语言要点
    Java中的length字段和length()方法
    Java学习有方法有捷径
    Java 分隔符函数split的使用注意事项
  • 原文地址:https://www.cnblogs.com/richiewlq/p/7522721.html
Copyright © 2011-2022 走看看