电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

MySQL插入數據時,如果記錄不存在則insert,如果存在則update

瀏覽:777日期:2023-11-30 11:23:05

MySQL 當記錄不存在時insert,當記錄存在時更新網上基本有三種解決方法。第一種:示例一:insert多條記錄假設有一個主鍵為 client_id 的 clients 表,可以使用下面的語句:INSERT INTO clients(client_id, client_name, client_type)SELECT supplier_id, supplier_name, 'advertising'FROM suppliersWHERE not exists (select * from clientswhere clients.client_id = suppliers.supplier_id);示例一:insert單條記錄INSERT INTO clients(client_id, client_name, client_type)SELECT 10345, 'IBM', 'advertising'FROM dualWHERE not exists (select * from clientswhere clients.client_id = 10345);使用 dual 做表名可以讓你在 select 語句后面直接跟上要insert字段的值,即使這些值還不存在當前表中。第二種:INSERT 中 ON DUPLICATE KEY UPDATE的使用如果您指定了ON DUPLICATE KEY UPDATE,并且insert行后會導致在一個UNIQUE索引或PRIMARY KEY中出現重復值,則執行舊行UPDATE。例如,如果列a被定義為UNIQUE,并且包含值1,則以下兩個語句具有相同的效果:mysql> INSERT INTO table (a,b,c) VALUES (1,2,3) -> ON DUPLICATE KEY UPDATE c=c+1;mysql> UPDATE table SET c=c+1 WHERE a=1;如果行作為新記錄被insert,則受影響行的值為1;如果原有的記錄被更新,則受影響行的值為2。注釋:如果列b也是唯一列,則INSERT與此UPDATE語句相當:mysql> UPDATE table SET c=c+1 WHERE a=1 OR b=2 LIMIT 1;如果a=1 OR b=2與多個行向匹配,則只有一個行被更新。通常,您應該盡量避免對帶有多個唯一關鍵字的表使用ON DUPLICATE KEY子句。您可以在UPDATE子句中使用VALUES(col_name)函數從INSERT...UPDATE語句的INSERT部分引用列值。換句話說,如果沒有發生重復關鍵字沖突,則UPDATE子句中的VALUES(col_name)可以引用被insert的col_name的值。本函數特別適用于多行insert。 VALUES()函數只在INSERT...UPDATE語句中有意義,其它時候會返回NULL。示例:mysql> INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6) -> ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);本語句與以下兩個語句作用相同:mysql> INSERT INTO table (a,b,c) VALUES (1,2,3) -> ON DUPLICATE KEY UPDATE c=3;mysql> INSERT INTO table (a,b,c) VALUES (4,5,6) -> ON DUPLICATE KEY UPDATE c=9;當您使用ON DUPLICATE KEY UPDATE時,DELAYED選項被忽略。第三種:REPLACE語句我們在使用數據庫時可能會經常遇到這種情況。如果一個表在一個字段上建立了唯一索引,當我們再向這個表中使用已經存在的鍵值insert一條記錄,那將會拋出一個主鍵沖突的錯誤。當然,我們可能想用新記錄的值來覆蓋原來的記錄值。如果使用傳統的做法,必須先使用DELETE語句刪除原先的記錄,然后再使用 INSERTinsert新的記錄。而在MySQL中為我們提供了一種新的解決方案,這就是REPLACE語句。使用REPLACEinsert一條記錄時,如果不重復,REPLACE就和INSERT的功能一樣,如果有重復記錄,REPLACE就使用新記錄的值來替換原來的記錄值。使用REPLACE的最大好處就是可以將DELETE和INSERT合二為一,形成一個原子操作。這樣就可以不必考慮在同時使用DELETE和INSERT時添加事務等復雜操作了。在使用REPLACE時,表中必須有唯一索引,而且這個索引所在的字段不能允許空值,否則REPLACE就和INSERT完全一樣的。在執行REPLACE后,系統返回了所影響的行數,如果返回1,說明在表中并沒有重復的記錄,如果返回2,說明有一條重復記錄,系統自動先調用了 DELETE刪除這條記錄,然后再記錄用INSERT來insert這條記錄。如果返回的值大于2,那說明有多個唯一索引,有多條記錄被刪除和insert。REPLACE的語法和INSERT非常的相似,如下面的REPLACE語句是insert或更新一條記錄。REPLACE INTO users (id,name,age) VALUES(123, '趙本山', 50);insert多條記錄:REPLACE INTO users(id, name, age)VALUES(123, '趙本山', 50), (134,'Mary',15);REPLACE也可以使用SET語句REPLACE INTO users SET id = 123, name = '趙本山', age = 50;上面曾提到REPLACE可能影響3條以上的記錄,這是因為在表中有超過一個的唯一索引。在這種情況下,REPLACE將考慮每一個唯一索引,并對每一個索引對應的重復記錄都刪除,然后insert這條新記錄。假設有一個table1表,有3個字段a, b, c。它們都有一個唯一索引。CREATE TABLE table1(a INT NOT NULL UNIQUE,b INT NOT NULL UNIQUE,c INT NOT NULL UNIQUE);假設table1中已經有了3條記錄a b c1 1 12 2 23 3 3下面我們使用REPLACE語句向table1中insert一條記錄。REPLACE INTO table1(a, b, c) VALUES(1,2,3);返回的結果如下Query OK, 4 rows affected (0.00 sec)在table1中的記錄如下a b c1 2 3我們可以看到,REPLACE將原先的3條記錄都刪除了,然后將(1, 2, 3)insert??偨Y:雖然沒有具體測試,感覺第一種最費資源了(只是感覺),不過你要是沒有主鍵的話也只能用他了。第二種和第三種的區別是:1)insert是先嘗試insert,若主鍵存在則更新。REPLACE是先嘗試insert,若主鍵存在則刪除原紀錄再insert。2)如果有多個唯一關鍵字發生沖突(不同關鍵字的沖突發生在不同記錄),比如現在有2個字段2條記錄沖突了(沒條記錄沖突一個字段),則insert是選擇排序后在前面的一條進行更新,REPLACE是刪除那兩條記錄,然后insert新記錄。本人的一點小見解,如有錯誤,歡迎指正。

標簽: MySQL 數據庫
相關文章:
主站蜘蛛池模板: 合肥废气治理设备_安徽除尘设备_工业废气处理设备厂家-盈凯环保 合肥防火门窗/隔断_合肥防火卷帘门厂家_安徽耐火窗_良万消防设备有限公司 | 火锅底料批发-串串香技术培训[川禾川调官网] | 天长市晶耀仪表有限公司| 北京亦庄厂房出租_经开区产业园招商信息平台 | 凝胶成像系统(wb成像系统)百科-上海嘉鹏 | 高铝轻质保温砖_刚玉莫来石砖厂家_轻质耐火砖价格 | 澳门精准正版免费大全,2025新澳门全年免费,新澳天天开奖免费资料大全最新,新澳2025今晚开奖资料,新澳马今天最快最新图库 | 中国品牌门窗网_中国十大门窗品牌_著名门窗品牌 | 上海冠顶工业设备有限公司-隧道炉,烘箱,UV固化机,涂装设备,高温炉,工业机器人生产厂家 | 办公室装修_上海办公室设计装修_时尚办公新主张-后街印象 | 气力输送_输送机械_自动化配料系统_负压吸送_制造主力军江苏高达智能装备有限公司! | 插针变压器-家用电器变压器-工业空调变压器-CD型电抗器-余姚市中驰电器有限公司 | 彩超机-黑白B超机-便携兽用B超机-多普勒彩超机价格「大为彩超」厂家 | 热缩管切管机-超声波切带机-织带切带机-无纺布切布机-深圳市宸兴业科技有限公司 | 济宁工业提升门|济宁电动防火门|济宁快速堆积门-济宁市统一电动门有限公司 | 河南道路标志牌_交通路标牌_交通标志牌厂家-郑州路畅交通 | 北京模型公司-军事模型-工业模型制作-北京百艺模型沙盘公司 | 气弹簧定制-气动杆-可控气弹簧-不锈钢阻尼器-工业气弹簧-可调节气弹簧厂家-常州巨腾气弹簧供应商 | 组织研磨机-高通量组织研磨仪-实验室多样品组织研磨机-东方天净 传递窗_超净|洁净工作台_高效过滤器-传递窗厂家广州梓净公司 | 锯边机,自动锯边机,双面涂胶机-建业顺达机械有限公司 | 深圳市源和塑胶电子有限公司-首页 | 400电话_400电话申请_866元/年_【400电话官方业务办理】-俏号网 3dmax渲染-效果图渲染-影视动画渲染-北京快渲科技有限公司 | 校园文化空间设计-数字化|中医文化空间设计-党建|法治廉政主题文化空间施工-山东锐尚文化传播公司 | 档案密集架_电动密集架_移动密集架_辽宁档案密集架-盛隆柜业厂家现货批发销售价格公道 | 细石混凝土泵_厂家_价格-烟台九达机械有限公司 | 真空泵厂家_真空泵机组_水环泵_旋片泵_罗茨泵_耐腐蚀防爆_中德制泵 | 工控机,嵌入式主板,工业主板,arm主板,图像采集卡,poe网卡,朗锐智科 | 低浓度恒温恒湿称量系统,强光光照培养箱-上海三腾仪器有限公司 | 单锥双螺旋混合机_双螺旋锥形混合机-无锡新洋设备科技有限公司 | 恒温恒湿试验箱厂家-高低温试验箱维修价格_东莞环仪仪器_东莞环仪仪器 | SEO网站优化,关键词排名优化,苏州网站推广-江苏森歌网络 | 曙光腾达官网-天津脚手架租赁-木板架出租-移动门式脚手架租赁「免费搭设」 | 酒精检测棒,数显温湿度计,酒安酒精测试仪,酒精检测仪,呼气式酒精检测仪-郑州欧诺仪器有限公司 | 楼梯定制_楼梯设计施工厂家_楼梯扶手安装制作-北京凌步楼梯 | ★店家乐|服装销售管理软件|服装店收银系统|内衣店鞋店进销存软件|连锁店管理软件|收银软件手机版|会员管理系统-手机版,云版,App | 换网器_自动换网器_液压换网器--郑州海科熔体泵有限公司 | 钢绞线万能材料试验机-全自动恒应力两用机-混凝土恒应力压力试验机-北京科达京威科技发展有限公司 | 板框压滤机-隔膜压滤机配件生产厂家-陕西华星佳洋装备制造有限公司 | EPK超声波测厚仪,德国EPK测厚仪维修-上海树信仪器仪表有限公司 | 玻璃钢型材_拉挤模具_玻璃钢拉挤设备——滑县康百思 | Boden齿轮油泵-ketai齿轮泵-yuken油研-无锡新立液压有限公司 |