【PHP+MYSQL】批量插入時表中有相同資料的話則批量更新
阿新 • • 發佈:2018-11-20
應用場景
有時候我們向資料庫插入記錄時,有時會有這種需求,當符合某種條件的資料存在時,去修改它,不存在時,則新增資料的情況。
比如說系統配置則一塊,如有下表:
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 傳送門