1. 程式人生 > >【資料庫索引】mysql更新資料報錯:Duplicate entry 'XXX' for key 'XXX'

【資料庫索引】mysql更新資料報錯:Duplicate entry 'XXX' for key 'XXX'

經查:資料庫表索引型別設定問題導致,unique:約束資料庫表中的每一條資料唯一

補充:

1.UNIQUE(要求列唯一) 和 PRIMARY KEY(主鍵唯一) 約束均為列或列集合提供了唯一性的保證。

   PRIMARY KEY (主鍵)擁有自動定義的 UNIQUE 約束。

   並且:每個表可以有多個 UNIQUE 約束,但是每個表只能有一個 PRIMARY KEY 約束。

2.其他索引型別:Normal:普通索引,大多數情況下都可以使用。

                            Full Text:表示全文收索,在檢索長文字的時候,效果最好,短文字建議使用Index,但是在檢索的時候資料量比較大的時候,現將資料放入一個沒有全域性索引的表中,然後在用Create Index建立的Full Text索引,要比先為一張表建立Full Text然後在寫入資料要快的很多 。

3.mysql中常用兩種索引演算法

   BTree:BTree索引是最常用的mysql資料庫索引演算法,因為它不僅可以被用在=,>,>=,<,<=和between這些比較操作符上,而且                    還可以用於like操作符,只要它的查詢條件是一個不以萬用字元開頭的常量,例如: 
                   select * from user where name like 'jack%'; 
                   select * from user where name like 'jac%k%'; 

   Hash:Hash索引只能用於對等比較,例如=,<=>(相當於=)操作符。由於是一次定位資料,不像BTree索引需要從根節點到枝                 節點,最後才能訪問到頁節點這樣多次IO訪問,所以檢索效率遠高於BTree索引。 但是弊端也很多,所以使用BTree遠                    多於Hash。

4.索引的優缺點
   優點:
   1.通過建立唯一性索引,可以保證資料庫表中每一行資料的唯一性。 
   2.可以大大加快資料的檢索速度,這也是建立索引的最主要的原因。 
   3.可以加速表和表之間的連線,特別是在實現資料的參考完整性方面特別有意義。 
   4.在使用分組和排序子句進行資料檢索時,同樣可以顯著減少查詢中分組和排序的時間。 
   5.通過使用索引,可以在查詢的過程中,使用優化隱藏器,提高系統的效能。

   缺點:
   1.建立索引和維護索引要耗費時間,這種時間隨著資料量的增加而增加。 
   2.索引需要佔物理空間,除了資料表佔資料空間之外,每一個索引還要佔一定的物理空間,如果要建立聚集索引那麼需要的空 間就會更大。 
   3.當對錶中的資料進行增加、刪除和修改的時候,索引也要動態的維護,這樣就降低了資料的維護速度。

      因為索引非常佔記憶體,所以索引也需要謹慎新增,那些欄位需要索引。

相關推薦

資料庫索引mysql更新資料Duplicate entry 'XXX' for key 'XXX'

經查:資料庫表索引型別設定問題導致,unique:約束資料庫表中的每一條資料唯一。 補充: 1.UNIQUE(要求列唯一) 和 PRIMARY KEY(主鍵唯一) 約束均為列或列集合提供了唯一性的保證。    PRIMARY KEY (主鍵)擁有自動定義的 UNIQUE

已解決mac上appium“Could not find aapt Please set the ANDROID_HOME environment variable with the Android SDK root directory path”

resource sset root could not fun ror 環境 apt direct 按照網上教程配置完appium環境後,真機跑自動化過程,遇到如下報錯: appium報錯如下: [ADB] Checking whether aapt is present

Mysql錯誤Duplicate entry '127' for key 'PRIMARY'的解決方法

有時候真是挺幸運,正當我自以為是地認為掌握了某個知識點的時候,現實就會馬上出現另外一個問題,讓我知道之前的認知是不全面的。 正如我上篇博文中所述,如果一個自增欄位達到了上限,而且繼續向裡面插入資料的話會出現 Failed to read auto-increment val

web開發——Duplicate entry '...' for key 'PRIMARY

問題解釋: Duplicate entry '...' for key 'PRIMARY,即插入資料時,要插入資料的主鍵資料(...)已經存在,不能再重複添加了。例:Duplicate entry '

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationExceptionDuplicate entry '0' for k

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '0' for key 1 at sun.reflect.NativeConstruct

資料庫遠端MySQL資料庫開啟遠端連線方法

Mysql安裝後,預設不能外網直接訪問的,只能本機訪問,但是很多使用者需要外網訪問來備份資料、修改資料或者呼叫資料,mysql如何開啟遠端連線呢?下面就是MySQL資料庫開啟遠端連線方法。 登陸mysql操作命令如下直接複製即可 1.下面的命令是給予任何主機訪問資料的許可權 mysql&

Linux MySQL資料庫遠端連線插入中文資料

剛開始學Java,最近在用Java寫一個圖書管理系統,基本已經完成。寫的過程中資料庫都是本地訪問的,在我基本寫完改成遠端訪問伺服器中的MySQL時,總是報錯有一個列中的值錯誤,找了半天發現是編碼問題導致不能插入中文資料。下面是解決辦法: 1、修改MySQL配置 sudo vim

oracle impdp匯入資料ORA-29283: invalid file operation

oracle impdp匯入資料報錯ORA-29283: invalid file operation 資料庫版本:11.2.0.4;系統版本:Oracle Linux 6.4 場景: 使用impdp匯入資料,dump檔名為bop_1112.dump,directory為:dataBac

Mysql 解決MySQL8.0Unknown system variable 'validate_password_policy'

author:咔咔 wechat:fangkangfk   問題所在一個是  _  連線的一個是  .  連線的   一、問題描述 1、在安裝MySQL8.0時,修改臨時密碼,因密碼過於簡單(如:123456),

Linux MySQL資料庫遠端連線插入中文資料

剛開始學Java,最近在用Java寫一個圖書管理系統,基本已經完成。寫的過程中資料庫都是本地訪問的,在我基本寫完改成遠端訪問伺服器中的MySQL時,總是報錯有一個列中的值錯誤,找了半天發現是編碼問題導致不能插入中文資料。下面是解決辦法: 1、修改MySQL配置

oracle impdp匯入資料ORA-29283: invalid file operation

oracle impdp匯入資料報錯ORA-29283: invalid file operation ORA-39002: invalid operation ORA-39070: Unable t

Mybatis中對於Mysql資料庫中NULL的日期資料 mysql錯誤 Cannot convert value '0000-00-00 00:00:00' from column 10 to TIMESTAMP

原 mysql錯誤: Cannot convert value '0000-00-00 00:00:00' from column 10 to TIMESTAMP 2010年06月01日 17:38:00 閱讀數:5307

資料庫基礎MySQL從建庫到刪庫跑路簡要筆記(逃。。

標題純屬開玩笑,這裡主要是為了系統的梳理一下MySQL整個的操作流程。不會往深裡講。 圖形化介面也在用著,不過還是系統的補一下常用的指令操作。 針對環境 Ver 8.42 Distrib 5.7.21, for macos10.13 on x86

Mybatis中對於Mysql資料庫中NULL的日期資料

問題:MySQL資料庫,如果資料庫中日期欄位為空為值為'0000-00-00 00:00:00"時,查詢的時候回報:Cannot convert value '0000-00-00 00:00:00' from column 10 to TIMESTAMP解決辦法:更改連線資料庫方式在連線:jdbc:mysq

FAQmysql 初始化 timestamp,提示 Invalid default value for 'xxx'

原來是 Laravel 4.2 和 Mysql 5.7 搭配出了問題,5.7 裡 Mysql 不允許時間戳的值為 0 。 解決 方案1. 修改預設的 Mysql 配置 sudo vi /etc/mysql/my.cnf 在 [mysqld] 區域新增: s

重新命名資料無法用排他鎖鎖定該資料庫,以執行該操作。 (Microsoft SQL Server,錯誤: 5030)

一般來說,在確保沒有客戶端連線的情況下,重新命名資料庫不會報這個錯 解決方法: Use master  EXEC sp_dboption 'OldDbName', 'Single User', 'TRUE'  EXEC sp_renamedb 'OldDbName',

轉載讀取txt檔案UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc8 in position 0

python在open讀取txt檔案時,出現UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xc8 in position 0: invalid continuation byte報錯 解決辦法有二: ①把編碼方式utf-8

MySQL匯入資料Got a packet bigger than‘max_allowed_packet’bytes錯誤的解決方法

由於max_allowed_packet的值設定過小的原因,只需要將max_allowed_packet值設定大一點就OK了。 通過終端進入mysql控制檯,輸入如下命令可以檢視max_allowed_packet值的大小。 1.臨時生效 show VARIABLES l

mysql查詢資料

1、ERROR 1055報錯: 當使用sql語句查詢資料庫時,出現1055報錯時, 官方文件解釋說5.7版本的mysql不允許groud_by中未引用select後出現的欄位: 因為5.7.5預設的sql模式配置是ONLY_FULL_GROUP_BY, 這個配置啟用的是 “嚴格A

MySQL Workbench批量修改資料Error Code: 1175. You are using safe update mode and you tried to update a t

批量修改資料SQL:update sys_menu set menu_extralink = true     錯誤資訊: Error Code: 1175. You are using safe update mode and you tried to upd