MySQL如何使用UNIQUE來實現數據不重復插入的詳細介紹

當unique列在一個unique鍵上插入包含重復值的記錄時,我們可以控制mysql如何處理這種情況:使用ignore關鍵字或者on duplicate mysql upmysql子句跳過insert、中斷操作或者mysql舊記錄為新值。

SQL UNIQUE mysql

UNIQUE 約束唯一標識數據庫表中的每條記錄。
UNIQUE 和 PRIMARY KEY 約束均為列或列集合提供了唯一性的保證。
PRIMARY KEY 擁有自動定義的 UNIQUE 約束。

請注意,每個表可以有多個 UNIQUE 約束,但是每個表只能有一個 PRIMARY KEY 約束。

下面的 SQL 在 “Persons” 表創建時在 “Id_P” 列創建 UNIQUE 約束:

CREATE?TABLE?Persons  (  ??Id_P?int?NOT?NULL,  ??LastName?varchar(255)?NOT?NULL,  ??FirstName?varchar(255),  ??Address?varchar(255),  ??City?varchar(255),  ??UNIQUE?(Id_P)  )

如果需要命名 UNIQUE 約束,以及為多個列定義 UNIQUE 約束,請使用下面的 SQL 語法:

CREATE?TABLE?Persons  (  ??Id_P?int?NOT?NULL,  ??LastName?varchar(255)?NOT?NULL,  ??FirstName?varchar(255),  ??Address?varchar(255),  ??City?varchar(255),  ??CONSTRAINT?uc_PersonID?UNIQUE?(Id_P,LastName)  )

當表已被創建時,如需在 “Id_P” 列創建 UNIQUE 約束,請使用下列 SQL:

ALTER?TABLE?Persons?ADD?UNIQUE?(Id_P)

如需命名 UNIQUE 約束,并定義多個列的 UNIQUE 約束,請使用下面的 SQL 語法:

ALTER?TABLE?Persons?ADD?CONSTRAINT?uc_PersonID?UNIQUE?(Id_P,LastName)

如需撤銷 UNIQUE 約束,請使用下面的 SQL:

ALTER?TABLE?Persons?DROP?INDEX?uc_PersonID

這樣每次插入重復記錄時MySQL就會提示Duplicate entry value1-value2 mysql key uni_que,當然你可以在insert的時候加入ignore來忽略掉
現在保證了無重復記錄后,我們要開始記錄不存在則插入,存在則更新操作

INSERT?INTO?tablename?(field1,?field2,?field3,?...)?VALUES?('value1',?'value2','value3',?...)?ON?DUPLICATE?KEY?UPDATE?field1='value1',?field2='value2',?field3='value3',?...

這個語句的意思是,插入值,如果沒有該記錄執行

INSERT?INTO?tablename?(field1,?field2,?field3,?...)?VALUES?('value1',?'value2','value3',?...)

這一段,如果存在該記錄,那么執行

UPDATE?field1='value1',?field2='value2',?field3='value3',?...

? 版權聲明
THE END
喜歡就支持一下吧
點贊5 分享