【資料庫索引】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.MySQLIntegrityConstraintViolationException:Duplicate 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.0報錯:Unknown 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
【FAQ】mysql 初始化 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