數據庫避免插入重復的數據(已經有重復數據的表中又該怎么設置)


有的時候需要對數據庫的某個字段要求不能重復,所以要設置這個字段的唯一性

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)

 

 

 

 

 

 

 

 

navicat


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM