在資料庫的設計的時候經常會遇到這種問題,建立了普通索引想轉唯一索引,但是資料庫有重複資料了。而且資料不好找和刪除。這個時候怎麼辦呢?
這裡給乙個例子:
表 student 其資料結構如下:
idname
grade
score
1zhanghanlun12
2zhanghanlun13
3zhangwei10
在這個表中我們想要新建唯一索引uniq_name_grade
(name
,grade
)
但是有重複的資料,怎麼辦呢?
執行下面的sql
alter
ignore
table student add
unique
index
`uniq_name_grade`
(`name`
,`grade`
);
重點是ignore引數,會將重複的資料刪掉,保留一條。
現在的表的結構如下:
idname
grade
score
1zhanghanlun12
3zhangwei10
執行sql完將重複的資料刪掉了,只儲存了一條資料
其表的ddl如下:
create
table
`student`
(`id`
int(11)
notnull
auto_increment
,`name`
varchar
(255
)collate utf8_bin not
null
,`grade`
int(10)
notnull
,`score`
int(10)
notnull
,primary
key(
`id`),
unique
key`uniq_name_grade`
(`name`
,`grade`))
engine
=innodb
auto_increment=4
default
charset
=utf8 collate
=utf8_bin;
普通索引 唯一索引 區別
分析唯一索引和普通索引在查詢語句和更新語句中的效能影響。假設執行以下語句 select id from t where k 5這個查詢語句在索引樹上查詢的過程,先是通過 b 樹從樹根開始,按層搜尋到葉子節點,然後可以在資料頁內部通過二分法來定位記錄。以上看起來唯一索引比普通索引少了一步判斷,其實帶來...
主索引 普通索引 候選索引 唯一索引
1.普通索引 普通索引 由關鍵字key或index定義的索引 唯一的任務是加快對資料的訪問速度。因此,應該只為那些最經常出現在查詢條件 wherecolumn 或排序條件 orderbycolumn 中的資料列建立索引 2.唯一索引 在某個資料列只包含彼此不同的值,在為這個資料列建立索引時就應該用關...
普通索引 唯一索引 主鍵索引 候選索引
1 普通索引 1 定義 最基本的索引型別,沒有唯一性之類的限制。2 建立方式 a 建立索引,例如create index 索引的名字 on tablename 列的列表 b 修改表,例如alter table tablename add index 索引的名字 列的列表 c 建立表的時候指定索引,例...