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

歡迎訪問 生活随笔!

生活随笔

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

数据库

mysql用唯一约束避免重复_mysql中创建唯一约束防止数据重复

發(fā)布時間:2024/9/20 数据库 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql用唯一约束避免重复_mysql中创建唯一约束防止数据重复 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

針對數(shù)據(jù)重復插入的情況,我們通常會在業(yè)務代碼中進行處理,就是說入庫的時候先查一遍有沒有,沒有記錄的情況再準許入庫。但是如果只是自己處理業(yè)務代碼時先查后入庫,并發(fā)高時會發(fā)生意想不到的后果。

比如現(xiàn)在表tab里有兩個字段fa, fb。業(yè)務規(guī)定,fa和fb的值只能成對出現(xiàn)一次(好比1,2入庫一次,就不能再有一條1,2的記錄入庫)。

當在自己的業(yè)務代碼里處理避免再次入庫時,會這樣處理,

步驟一:select 1 from tab where fa = ? and fb = ?

步驟二:insert tab values (?, ?)

那么問題來了:當?shù)谝粭l記錄來了,比如fa=1, fb=2。此時他通過了步驟一的檢測,沒有這條記錄,于是來到了步驟二。就在此時,第二條記錄又來了,而且又是一個fa=1, fb=2。好吧,第一條記錄可能還沒入庫完呢,那第二條記錄也可以通過了步驟一的檢測,也來到了步驟二。。而這時,意想不到的事發(fā)生了。有兩條一樣的記錄了。所以這種并發(fā)高了的情況發(fā)生就造成這樣滴局面。

而如果在數(shù)據(jù)庫層面進行限制就會完美解決這一個問題(當然業(yè)務上有上述需求的話,db做了限制外,最好自己的業(yè)務代碼也要先查一下,再入庫。發(fā)生了什么好做處理,比如查詢的時候發(fā)現(xiàn)已經(jīng)入庫了,這時又什么業(yè)務策略。再有也可以通過數(shù)據(jù)庫返回碼,唯一約束時,db會拋出[Err] 1062的錯誤碼)。。

一個表可以有多個唯一約束,一個約束可以只有一列,當然也可以有多列。? 添加唯一索引的方法如下:

1

2ALTER TABLE tab ADD CONSTRAINT some_name UNIQUE (fa, fb)

如果在第一次建表時,加約束方法如下:

CREATE TABLE tab ( fa int NOT NULL, fb int NOT NULL, CONSTRAINT some_name UNIQUE (fa ,fb ) )

總結(jié)

以上是生活随笔為你收集整理的mysql用唯一约束避免重复_mysql中创建唯一约束防止数据重复的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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