zoukankan      html  css  js  c++  java
  • mysql insert into, insert ignore into, insert into on duplicate key update

    几个sql的执行情况汇总如下表:

    指令 已存在 不存在
    insert 报错 插入
    insert ignore 忽略 插入
    insert into on duplicate key update 更新 插入
    insert ignore into on duplicate key update 更新 插入

    数据表要求有主键或唯一键。

    另外,以上操作,都会使自增字段自增。

    下面做下具体的测试。

    建表

    CREATE TABLE `test5` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(45) NOT NULL,
      `age` tinyint(4) NOT NULL DEFAULT '0',
      PRIMARY KEY (`id`),
      UNIQUE KEY `name_UNIQUE` (`name`)
    ) ENGINE=InnoDB;
    

    id是主键,自增,name是唯一键。

    insert into

    > insert into test5 (name, age) values('John', 1);
    Query OK, 1 row affected (0.00 sec)
    

    查询

    mysql> select * from test5;
    +----+------+-----+
    | id | name | age |
    +----+------+-----+
    |  1 | John |   1 |
    +----+------+-----+
    1 row in set (0.00 sec)
    

    已插入新记录。

    再次插入

    mysql> insert into test5 (name, age) values('John', 1);
    ERROR 1062 (23000): Duplicate entry 'John' for key 'name_UNIQUE'
    

    报错,唯一键冲突。

    insert ignore into

    mysql> insert ignore into test5 (name, age) values('John', 1);
    Query OK, 0 rows affected, 1 warning (0.00 sec)
    

    查询

    mysql> select * from test5;
    +----+------+-----+
    | id | name | age |
    +----+------+-----+
    |  1 | John |   1 |
    +----+------+-----+
    1 row in set (0.00 sec)
    

    ignore 会忽略错误。

    insert into on duplicate update

    mysql> insert into test5 (name, age) values('John', 2) on duplicate key update age=2;
    Query OK, 2 rows affected (0.00 sec)
    

    查询

    mysql> select * from test5;
    +----+------+-----+
    | id | name | age |
    +----+------+-----+
    |  1 | John |   2 |
    +----+------+-----+
    1 row in set (0.00 sec)
    

    age更新为2。

    不存在记录时

    mysql> insert into test5 (name, age) values('Alex', 2) on duplicate key update age=2;
    Query OK, 1 row affected (0.00 sec)
    

    查询

    mysql> select * from test5;
    +----+------+-----+
    | id | name | age |
    +----+------+-----+
    |  1 | John |   2 |
    |  7 | Alex |   2 |
    +----+------+-----+
    2 rows in set (0.00 sec)
    

    会插入新记录。

    insert ignore into on duplicate update

    mysql> insert ignore into test5 (name, age) values('John', 3) on duplicate key update age=3;
    Query OK, 2 rows affected (0.01 sec)
    

    查询

    mysql> select * from test5;
    +----+------+-----+
    | id | name | age |
    +----+------+-----+
    |  1 | John |   3 |
    |  7 | Alex |   2 |
    +----+------+-----+
    2 row in set (0.00 sec)
    

    John的age更新为3。

    不存在记录时

    mysql> insert ignore into test5 (name, age) values('Bob', 3) on duplicate key update age=3;
    Query OK, 1 row affected (0.00 sec)
    
    mysql> select * from test5;
    +----+------+-----+
    | id | name | age |
    +----+------+-----+
    |  1 | John |   3 |
    |  7 | Alex |   2 |
    |  8 | Bob  |   3 |
    +----+------+-----+
    3 rows in set (0.00 sec)
    

    会插入新记录。

    Just try, don't shy.
  • 相关阅读:
    [转]Sublime Text 3安装Json格式化插件
    Golang 新手可能会踩的 50 个坑【转】
    [golang]svg图片默认按照左上角旋转,改为按中心旋转,重新计算中心偏移量
    序列化是干什么的,有什么作用,什么情况下会用到?
    Hbase设置多个hmaster
    基于JMX动态配置Log4J日志级别
    面向过程与面向对象编程的区别和优缺点
    log4j自带的两个类MDC和NDC作用以及用途
    【架构师之路】集群/分布式环境下5种session处理策略
    Java Web项目如何做到升级不断掉服务,同时涉及到的相关问题
  • 原文地址:https://www.cnblogs.com/lanyangsh/p/14461156.html
Copyright © 2011-2022 走看看