1. 程式人生 > >【PHP+MYSQL】批量插入時表中有相同資料的話則批量更新

【PHP+MYSQL】批量插入時表中有相同資料的話則批量更新

應用場景

有時候我們向資料庫插入記錄時,有時會有這種需求,當符合某種條件的資料存在時,去修改它,不存在時,則新增資料的情況。
比如說系統配置則一塊,如有下表:

CREATE TABLE `system_config` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(60) NOT NULL DEFAULT '' COMMENT '配置標題',
  `details` varchar(255) NOT NULL DEFAULT '' COMMENT '配置詳細用途說明',
  `set_key` varchar(120) NOT NULL DEFAULT '' COMMENT '設定的key',
  `set_value` varchar(255) NOT NULL DEFAULT '' COMMENT '設定的value,如果配置值為陣列的話,自行轉為json存入欄位',
  `type` tinyint(4) NOT NULL DEFAULT '1' COMMENT '設定型別(\r\n1、站點設定,\r\n2、SEO設定,\r\n3、版權設定,\r\n4、運營設定,\r\n5、註冊與訪問,\r\n6、上傳設定,\r\n7、商家服務...)',
  `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '建立時間',
  `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '更新時間',
  PRIMARY KEY (`id`),
  UNIQUE KEY `set_key` (`set_key`) USING BTREE COMMENT 'key唯一索引',
  KEY `type` (`type`)
) ENGINE=MyISAM AUTO_INCREMENT=41 DEFAULT CHARSET=utf8mb4 COMMENT='系統配置表';

現在需要編輯配置,如果可以批量的編輯,並且存在則更新,否之則新增,那麼久可以使用 INSERT … ON DUPLICATE KEY UPDATE 語句。完整語句如下:


INSERT INTO system_config (title,details,set_key,set_value,type,created_at,updated_at) values ("123","123","123","123","123","2018-11-20 06:06:46","2018-11-20 06:06:46"),("12233","123","12334","123","123","2018-11-20 06:06:46","2018-11-20 06:06:46") ON DUPLICATE KEY UPDATE title=VALUES(title),details=VALUES(details),set_key=VALUES(set_key),set_value=VALUES(set_value),type=VALUES(type),updated_at=VALUES(updated_at);

下面給出一個批量操作的類,本來是用在laravel中的,所以如果需要用的話直接改下執行語句的方法就行
github 傳送門