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

歡迎訪問 生活随笔!

生活随笔

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

数据库

mysql 已存在数据_MySQL跳过已存在的数据

發布時間:2024/9/15 数据库 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 已存在数据_MySQL跳过已存在的数据 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、背景

在使用MySQL進行插入的時候,遇到了一個場景:當插入的數據不再數據庫中的時候就插入,否則就跳過。

二、方法

我們可以使用下面的SQL語句進行處理,處理語句如下。在這個里面有幾個重要的地方,DUAL和insert的操作。

標準:

INSERT INTO table(primarykey, field1, field2, ...)SELECT key, value1, value2, ...FROMdualWHERE not exists (select * from table where primarykey = id);

例子:

INSERT INTO mygame (userId,gameId) SELECT 1,2 from DUAL WHERE not EXISTS (SELECT * FROM mygame WHERE userId=6 and gameId=1)

從上述SQL的例子中講述每一部分的內容及含義:

2.1 首先是下面的部分

(SELECT * FROM mygame WHERE userId=6 and gameId=1)

這部分的含義是從mygame中獲取用戶id為6同時游戲id為1的數據,這里的查詢語句作用就是看有沒有這個數據,因此是否查詢所有屬性不重要,可以直接設置為1,如下面的格式:

SELECT 1 FROM mygame WHERE userId=6 and gameId=1)

2.2 然后是DUAL查詢的部分

SELECT 1,2 from DUAL WHERE not EXISTS (SELECT 1 FROM mygame WHERE userId=6 and gameId=1)

這一部分我們使用了一個not exists的關鍵查詢,意思是不存在則選擇出數據,如果存在選擇就是空,這里有一個很重要部分就是DUAL表的查詢,這是一個虛空表,select的表頭和值都是一樣的。如我執行下面的SQL語句:

SELECT 1,9,0 from DUAL

結果

note:如果使用*號查詢會使得數據結果錯誤,所以這就是為什么說他是虛擬表的原因。

2.3 最后是insert部分

INSERT INTO mygame (userId,gameId) SELECT 1,2 from DUAL WHERE not EXISTS (SELECT * FROM mygame WHERE userId=6 and gameId=1)

我們將從虛空表中的數據獲取出來并插入到mygame中,插入的數據就是虛空表的數據,也就是我們設置的1,2的值,與正常的插入一樣,如果字段不完全,需要具體字段,如果完全可以省略插入的字段,但是要按照順序,如下面的情況:

INSERT INTO mygame SELECT 1,9,0 from DUAL WHERE not EXISTS (SELECT 1 FROM mygame WHERE userId=6 and gameId=1)

如果不完全就會出現下面的錯誤

三、總結

這種很有效的插入方法已經介紹完了,在使用的時候需要注意,DUAL表的字段查詢會輸出你設計的字段,從DUAL表中選取的數據就是你要插入的字段,否則就會一直添加。

直到修改為6,12為止,才會結束

四、參考

dual表介紹:

官方介紹:

其他方法:

總結

以上是生活随笔為你收集整理的mysql 已存在数据_MySQL跳过已存在的数据的全部內容,希望文章能夠幫你解決所遇到的問題。

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