zoukankan      html  css  js  c++  java
  • MySQL插入更新_ON DUPLICATE KEY UPDATE

    前提:操作的表具有主键或唯一索引

    INSERT INTO:表中不存在对应的记录,则插入;若存在对应的记录,则报错;

    INSERT INTO IGNORE:表中不存在对应的记录,则插入;若存在对应的记录,则忽略,不进行任何操作

    REPLACE INTO:表中不存在对应的记录,则插入;若存在对应的记录,则删除原有的记录,再 插入新的记录。

    ON DUPLICATE KEY UPDATE(on duplicate key update)的功能类似于REPLACE INTO:

    若表中不存在数据(没有待插入记录的主键值或唯一索引值),则直接插入新的记录;

    若表中已存在数据(主键或唯一索引值相同),则执行更新操作。

    所以,ON DUPLICATE KEY UPDATE与REPLACE INTO在操作过程上不同的是:

    当已存在数据时,ON DUPLICATE KEY UPDATE执行更新操作,而不是先删除原有记录,再插入新记录。

    语句:INSERT INTO table_name (field1,field2...) values (value1,value2...) on duplicate key update filed3=value3;

    说明:update后面接的语句可以是其它表达式。

    假设有一个以下table:

    mysql> select * from staff_3;
    +----+----------+-------+
    | ID | name     | slary |
    +----+----------+-------+
    |  1 | liding   |  2700 |
    |  2 | haofugui |  3500 |
    |  3 | xiaoli   |  3600 |
    |  4 | xiaohua  |  6000 |
    +----+----------+-------+
    4 rows in set (0.00 sec)
    
    mysql> describe staff_3;
    +-------+----------+------+-----+---------+----------------+
    | Field | Type     | Null | Key | Default | Extra          |
    +-------+----------+------+-----+---------+----------------+
    | ID    | int(11)  | NO   | PRI | NULL    | auto_increment |
    | name  | char(10) | YES  | UNI | NULL    |                |
    | slary | int(11)  | YES  |     | NULL    |                |
    +-------+----------+------+-----+---------+----------------+
    3 rows in set (0.00 sec)

    进行on duplicate key on命令:(从ID可以看出,该命令执行更新操作别浪费自增属性值)

    mysql> insert into staff_3 (name,slary) values ('xiaoli',4000) on duplicate key update slary=5000;
    Query OK, 2 rows affected (0.00 sec)
    
    mysql> select * from staff_3;
    +----+----------+-------+
    | ID | name     | slary |
    +----+----------+-------+
    |  1 | liding   |  2700 |
    |  2 | haofugui |  3500 |
    |  3 | xiaoli   |  5000 |
    |  4 | xiaohua  |  6000 |
    +----+----------+-------+
    4 rows in set (0.00 sec)
    
    mysql> insert into staff_3 (name,slary) values ('xiaoming',4000) on duplicate key update slary=5000;
    Query OK, 1 row affected (0.00 sec)
    
    mysql> select * from staff_3;
    +----+----------+-------+
    | ID | name     | slary |
    +----+----------+-------+
    |  1 | liding   |  2700 |
    |  2 | haofugui |  3500 |
    |  3 | xiaoli   |  5000 |
    |  4 | xiaohua  |  6000 |
    |  5 | xiaoming |  4000 |
    +----+----------+-------+
    5 rows in set (0.00 sec)
  • 相关阅读:
    js如何实现base64转文件下载保存到本地
    安装node及环境配置
    一定需要使用(N)Text吗?
    MS Sql Server EXECUTE
    [teach.net]表组织和索引组织
    Optimization Rules of Thumb[part of Technet Article]
    vs2008的用户自定义控件
    执行计划的缓存和重新使用
    保持索引的健康
    SQLServer性能优化计数器
  • 原文地址:https://www.cnblogs.com/yy20141204bb/p/8400715.html
Copyright © 2011-2022 走看看