日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

[数据库]---mysql 插入sql之 INSERT INTO和INSERT IGNORE INTO和REPLACE INTO和ON DUPLICATE KEY UPDATE比较应用

發(fā)布時間:2024/7/23 数据库 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [数据库]---mysql 插入sql之 INSERT INTO和INSERT IGNORE INTO和REPLACE INTO和ON DUPLICATE KEY UPDATE比较应用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

mysql插入一條數(shù)據(jù)方式有四種,接下來逐個說明驗證:

前提:

有一個表,作為本次測試:

CREATE TABLE `zs_test` (`id` int(11) NOT NULL AUTO_INCREMENT,`order_id` int(11) DEFAULT NULL,`name` varchar(255) DEFAULT NULL,PRIMARY KEY (`id`),UNIQUE KEY `order_id_index` (`order_id`) ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;

表名是zs_test;
包括主鍵id,唯一索引order_id和普通列name;

INSERT INTO

最普通,最常用的插入是:
INSERT INTO zs_test (id,name,order_id) VALUES (1,‘a(chǎn)a’,11);
此時庫中有了一條數(shù)據(jù),id=1;name=‘a(chǎn)a’;order_id=11

idnameorder_id
1aa11

INSERT IGNORE INTO

  • 1.用這個插入一條,主鍵和唯一索引都是新的:

INSERT IGNORE INTO zs_test (id,name,order_id) VALUES (2,‘bb’,12);
也成功,受影響的行數(shù)是1,此時庫中有兩條數(shù)據(jù),

idnameorder_id
1aa11
2bb12

當本次要插入的主鍵id和唯一索引order_id在庫中都沒有重復時,INSERT IGNORE INTO相當于INSERT INTO;

  • 2.再插入一條,主鍵用了1,庫中已存在的:

INSERT IGNORE INTO zs_test (id,name,order_id) VALUES (1,‘bb’,13);
沒有報錯,受影響的行數(shù)是0,但是數(shù)據(jù)庫中的數(shù)據(jù)沒有變化,

idnameorder_id
1aa11
2bb12
  • 3.再插入一條,唯一索引用了11,庫中已存在的:

INSERT IGNORE INTO zs_test (id,name,order_id) VALUES (3,‘bb’,11);
沒有報錯,受影響的行數(shù)是0,但是數(shù)據(jù)庫中的數(shù)據(jù)沒有變化,

idnameorder_id
1aa11
2bb12

當本次要插入的主鍵id或者唯一索引order_id在庫中有任何一個重復時,INSERT IGNORE INTO相當于不執(zhí)行任何操作;


REPLACE INTO

  • 1.用這個插入一條,主鍵和唯一索引都是新的:

REPLACE INTO zs_test (id,name,order_id) VALUES (3,‘cc’,13);
也成功,受影響的行數(shù)是1,此時庫中有三條數(shù)據(jù),

idnameorder_id
1aa11
2bb12
3cc13

當本次要插入的主鍵id和唯一索引order_id在庫中都沒有重復時,REPLACE INTO相當于INSERT INTO;

  • 2.再插入一條,主鍵用了1,庫中已存在的:

REPLACE INTO zs_test (id,name,order_id) VALUES (1,‘bb’,14);
執(zhí)行成功,受影響的行數(shù)是2,此時庫中有三條數(shù)據(jù),但是主鍵為1的那條數(shù)據(jù),他的order_id變成了14,name也變成bb

idnameorder_id
1bb14
2bb12
3cc13

當本次要插入的主鍵id和唯一索引order_id在庫中有任何一個重復時,REPLACE INTO相當于先刪除原數(shù)據(jù),再INSERT INTO本條數(shù)據(jù),所以受影響行數(shù)是2;


ON DUPLICATE KEY UPDATE

  • 1.用這個插入一條,主鍵和唯一索引都是新的:
    INSERT INTO zs_test (id,name,order_id) VALUES (5,‘a(chǎn)a’,15) ON DUPLICATE KEY UPDATE name=‘a(chǎn)abb’;
    成功,受影響的行數(shù)是1,此時庫中有四條數(shù)據(jù),
idnameorder_id
1bb14
2bb12
3cc13
5aa15

當本次要插入的主鍵id和唯一索引order_id在庫中都沒有重復時,ON DUPLICATE KEY UPDATE后面的部分相當于沒寫,只是簡單的前面INSERT INTO的效果;

  • 2.再插入一條,主鍵用了1,庫中已存在的,唯一索引隨意:
    INSERT INTO zs_test (id,name,order_id) VALUES (1,‘a(chǎn)a’,12) ON DUPLICATE KEY UPDATE name=‘a(chǎn)abb’;
    成功,受影響的行數(shù)是2,此時庫中有四條數(shù)據(jù),但主鍵為1的那條數(shù)據(jù)的name值變成了aabb
idnameorder_id
1aabb14
2bb12
3cc13
5aa15

當本次要插入的主鍵id庫中有重復時,ON DUPLICATE KEY UPDATE相當于不改變數(shù)據(jù),將后面update的值做修改;

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結

以上是生活随笔為你收集整理的[数据库]---mysql 插入sql之 INSERT INTO和INSERT IGNORE INTO和REPLACE INTO和ON DUPLICATE KEY UPDATE比较应用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。