on duplicate key update簡單使用
1。最近在做專案的時候,遇到這樣的一個問題,就是我每做完一件事情,都要更新一下統計表,然而要更新統計表,就要根據主鍵去統計表裡面去查詢是否已經有這樣的一條記錄,如果有那麼就更新,如果沒有那麼就插入一條記錄,開始我就是這麼幹的,結果被老大給否決了,他說可以用on duplicate key update去做。下面就實際操作一下吧:
表結構:
±----------±--------±-----±----±--------±------+
| Field | Type | Null | Key | Default | Extra |
±----------±--------±-----±----±--------±------+
| player_id | int(11) | NO | PRI | NULL | |
| count | int(11) | YES | | NULL | |
±----------±--------±-----±----±--------±------+
2 rows in set (0.01 sec)
老做法是寫三條sql語句:
select * from player_count where player_id = 1;//查詢統計表中是否有記錄
insert into player_count(player_id,count) value(1,1);//沒有記錄就執行insert 操作
update player_count set count = count+1 where player_id = 1;//有記錄就執行update操作
這種寫法比較麻煩
用on duplicate key update 的做法如下:
insert into player_count(player_id,count) value(1,1) on duplicate key update count=count+1;
這樣每次不管插入還是更新都呼叫這句語句就能達到我們要的效果,省了不少的判斷。
-- Table "push_personalize_news_statistics" DDL
CREATE TABLE `push_personalize_news_statistics` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`stat_date` date NOT NULL DEFAULT '0000-00-00' COMMENT '統計日期',
`stat_type` tinyint(2) unsigned NOT NULL DEFAULT '0' COMMENT '統計型別 1 已審,2推薦,3不推薦 4每日進入備選池數量',
`stat_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '當天某型別的統計資料',
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`tag_id` int(11) NOT NULL DEFAULT '0' COMMENT '標籤id',
PRIMARY KEY (`id`),
UNIQUE KEY `uni_date_tag_type` (`stat_date`,`tag_id`,`stat_type`)
) ENGINE=InnoDB AUTO_INCREMENT=58 DEFAULT CHARSET=utf8mb4 COMMENT='資訊個推統計表';
新增為輸入的數字
INSERT INTO push_personalize_news_statistics (`stat_date`, `tag_id`, `stat_type`, `stat_count`) VALUES ('2018-12-12', 105226, 2, 2) ON
DUPLICATE KEY UPDATE `stat_count` = `stat_count` + VALUES(`stat_count`);
相關文章
- MySQL 關於 INSERT INTO...ON DUPLICATE KEY UPDATE 的使用MySql
- MySQL insert on duplicate key update 死鎖MySql
- MySQL_插入更新 ON DUPLICATE KEY UPDATEMySql
- BUG: pymysql executemany不支援insert on duplicate key updateMySql
- mysql實現merge功能之DUPLICATE key UPDATE語法MySql
- 翻譯:insert on duplicate key update(已提交到MariaDB官方手冊)
- ERROR 1062 (23000): Duplicate entry for key 'PRIMARY'Error
- Flutter key簡單介紹Flutter
- Window Application has "update" key wordsAPP
- Liquibase+SpringBoot的簡單使用筆記!update+rollbackUISpring Boot筆記
- MYSQL報1022錯誤:Can't write;duplicate key in table '.....'MySql
- Java中List集合轉Map集合報錯:Duplicate keyJava
- DUMP-CX_SY_OPEN_SQL_DB-DBSQL_DUPLICATE_KEY_ERRORSQLError
- 簡單分析MySQL中的primary key功能MySql
- Q:[Vue warn]: Duplicate keys detected: ‘PAYACT‘. This may cause an update error.VueError
- vue報錯之Duplicate keys detected: '0'. This may cause an update error.VueError
- rosdep update一定能通過de簡單方法ROS
- 帝國CMS後臺新增資訊報錯Duplicate entry xx for key PRIMARY
- fabirc error authorizing update: error validating ReadSet: readset expected key [Group] /Channel/AppErrorAPP
- 今天測試了一下update partition table的part key
- Azure Key Valut 簡介
- percona-toolkit之pt-index-usage和pt-duplicate-key-checker詳解Index
- 從ERROR 1062 (23000) at line Duplicate entry 'R01' for key 'PRIMARY' 能看出什麼Error
- git簡單使用Git
- OpenFeign簡單使用
- jq 簡單使用
- Quartz 簡單使用quartz
- LinqPad簡單使用
- kvm簡單使用
- 簡單使用 rocketmqMQ
- Badger簡單使用
- Drozer簡單使用
- Github 簡單使用Github
- mogilefs簡單使用
- kustomize簡單使用
- apijson簡單使用APIJSON
- 簡單使用autossh
- BootStrapValidate 簡單使用boot