mysql使用唯一索引避免插入重複資料

2022-09-18 05:27:33 字數 2041 閱讀 3934

使用mysql 索引防止乙個表中的一列或者多列產生重複值

如果要強烈使一列或多列具有唯一性,通常使用primary key約束。 但是,每個表只能有乙個主鍵。 因此,如果使多個列或多個組合列具有唯一性,則不能使用主鍵約束。

幸運的是,mysql提供了另一種索引,叫做唯一索引,允許我們可以使乙個或者多個列的值具有唯一性。另外,不會像主鍵索引一樣,我們的每張表中可以有很多個唯一索引

為了建立乙個唯一索引,我們可以來使用create unique index語法:

如果想要在乙個已存在表中新增乙個唯一索引,我們可以使用下列的alter table語句:

alter  table  table_name  add  index  index_name( column_1,column_2 ) ;
有一點值得注意下:

與其他資料庫系統不同,mysql將null值視為不同的值。所以,可以在唯一索引中包含很多的空值另乙個重點是unique約束不適用於除bdb儲存引擎之外的null值。

假設我們要管理應用程式中的聯絡人,並且還希望聯絡人表的每個聯絡人的電子郵件必須是唯一的。那我們就可以使用create table語句建立唯一約束來滿足我們的需求,如下:

create table if not exists contacts (

id int auto_increment primary key,

first_name varchar(50) not null,

last_name varchar(50) not null,

phone varchar(15) not null,

email varchar(100) not null,

unique index unique_email (email)

);

我們使用show indexes from contacts就能夠看到mysql在email這一列中建立乙個唯一的索引

現在我們向contacts表中插入一行資料來看下:

insert into contacts(first_name,last_name,phone,email)

values('john','doe','(408)-999-9765','[email protected]');

現在我們嘗試插入一行email列中有[email protected], 這時我們就會得到乙個報錯的資訊。

insert into contacts(first_name,last_name,phone,email)

values('johny','doe','(408)-999-4321','[email protected]');

報錯如下:

假設我們要乙個first_name、last_name、phone的聯合索引,我們可以使用下面的語法來得到:

create unique index idx_name_phone

on contacts(first_name,last_name,phone);

所以新增了 first_name, last_name, and phone已經存在的行,也是會造成錯誤的

insert into contacts(first_name,last_name,phone,email)

values('john','doe','(408)-999-9765','[email protected]');

報錯如下:

還有個技巧,在設定好索引的情況下,把insert into 改為 insert ignore into,也可成功實現不重複插入相同資料,

與上面的區別是:上面會報錯,加上ignore不會報錯,執行結果只會提示------------ 受影響的行: 0

這樣非常方便爬取資料的儲存。

參考文章:

mysql建立唯一索引,避免資料重複插入

多台伺服器使用乙個資料庫時,有時就會出現重複插入的情況,eg people表中的姓名和身份證號 此時可以給姓名和身份證號建立唯一索引,建立語句 alter table people add unique index name,cardid 建立後,平常的插入語句插入相同的name cardid會報錯...

mysql 唯一索引 mysql建立唯一索引

檢視索引 show index from 資料庫表名 alter table 資料庫add index 索引名稱 資料庫欄位名稱 primary key 主鍵索引 alter table table name add primary key column unique 唯一索引 alter tabl...

MySQL唯一索引

mysql唯一索引 返回首頁 1 唯一索引 unique 單列唯一索引和聯合唯一索引。索引是為了加速查詢。唯一索引是加了約束條件。例如主外來鍵。2 唯一索引的約束 約束不能重複 可以為空 主鍵不能重複 不能為空 3 唯一索引的寫法 create table t1 id int num int,uni...