zoukankan      html  css  js  c++  java
  • MYSQL数据插入和更新的语法

     tag:原文章地址

    经常会遇到一行数据在特定条件下如果存在就更新列,不存在就插入新的行,用replace和duplicate语法都可以实现,但是也是有区别的。如果是数据覆盖就用replace,如果只是想实现update就用duplicate。

    如下表:

    CREATE TABLE `table1` (

      `id` int(11) NOT NULL AUTO_INCREMENT,

      `ota_homestay_id` bigint(20) NOT NULL DEFAULT '0',

      `date` date NOT NULL DEFAULT '1970-01-01',

      `price` decimal(10,2) NOT NULL DEFAULT '0.00',

      `state` tinyint(4) NOT NULL DEFAULT '0',

      `inventory` smallint(6) NOT NULL DEFAULT '0',

      `ctime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,

      `mtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

      PRIMARY KEY (`id`),

      UNIQUE KEY `room_id_date_UNIQUE` (`ota_homestay_id`,`date`)

    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8mb4

    这里边有一行数据:


     

    replace方案:

    replace into table1 (ota_homestay_id, date, price, state, inventory)

    values ('10004987159', '2019-03-06', 600, 1, 1);

    每次执行ctime和mtime这两个时间字段都会变更,而且相等

    duplicate方案

    insert into homestay_ota_xiaozhu_price_calendar (ota_homestay_id, date, price, state, inventory)

    value ('10004987159', '2019-03-06', 700, 1, 1)

    on duplicate key update ota_homestay_id ='10004987159',

                            date            ='2019-03-06',

                            price          =700,

                            state          =1,

                            inventory      =1;

    红色部分字段值一般情况下要求一致,特殊情况特殊对待

    执行该语句,每次如果有数据就update执行on duplicate key update后面的数据更新。从时间字段上看每次如果有数据更新mtime会变化,没有数据更新mtime不变。和update语句行为一致

  • 相关阅读:
    【转】C++虚函数表
    vector的增长模式
    C++ 四种类型强制转换
    【转】new和malloc的区别
    C++堆和栈的区别
    C/C++中的内存分区
    mySQL__function课堂笔记和练习
    mySQL__storage课堂笔记和练习
    mySQL__Variable课堂笔记和练习
    mySQL__View课堂笔记和练习
  • 原文地址:https://www.cnblogs.com/JimmyBright/p/10482919.html
Copyright © 2011-2022 走看看