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語句行為一致

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM