有的時候需要對數據庫的某個字段要求不能重復,所以要設置這個字段的唯一性
1. 把這個字段設置成主鍵
把phonumber設置為主鍵
CREATE TABLE `userinformation` ( `username` varchar(50) DEFAULT NULL, `phonenumber` varchar(30) NOT NULL, `classify` varchar(20) DEFAULT NULL, `start_date` varchar(50) DEFAULT NULL, `end_date` datetime DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`phonumber`) )
2. 要是不想設置為主鍵,那可以為它增加UNIQUE屬性,在創建表的時候設置,要是設置某個字段的唯一性,那么這個字段也要設置NOT NULL,因為唯一索引不允許有兩個NULL及以上。
設置phonumber字段的唯一性
CREATE TABLE `userinformation` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(50) CHARACTER SET utf8mb4 DEFAULT NULL, `phonenumber` varchar(30) NOT NULL UNIQUE `classify` varchar(20) DEFAULT NULL, `start_date` varchar(50) DEFAULT NULL, `end_date` datetime DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) )
表已經創建了,想要后期加上
ALTER TABLE `userinformation` ADD unique(`字段名稱`)
3.我們還可以在navicat里設置
選中表后,點擊設計表:
點擊索引那一欄,選擇索引類型。名字自己隨意取。
注意:
1. 若是字段已存在重復的數據,那么在navicat里更改或者sql語句更改都會報錯的,那就需要先刪除重復的數據。navicat的刪除就不說了,我們說一下sql語句怎么刪除,假設我的表只有id和phonunumber這倆字段。
需要先創建一個臨時表new_table,臨時表的數據可以對原表userinformation進行分組查詢獲取,新生成的new_table中數據沒有重復的,也沒有id字段。
CREATE TABLE new_table SELECT phonenumber FROM userinformation GROUP BY phonenumber
拷貝原表的表結構為新表userinformation1,把new_table表的數據插入到userinformation1,然后刪原表,把新表改成原表的名字
DROP TABLE userinformation
INSERT INTO userinformation1 SELECT null,phonenumber FROM new_table
ALTER TABLE uaerinformation1 rename to userinformation
2. 我們對字段設置了唯一性后,插入的數據若是重復就會報錯,可以在INSERT的時候設置成數據重復就跳過。通過INSERT IGNORE 來跳過:
INSERT IGNORE INTO userinformation (phonumber) VALUES(111111)