刪除主鍵時(shí)是否會(huì)刪除索引?
創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括潢川網(wǎng)站建設(shè)、潢川網(wǎng)站制作、潢川網(wǎng)頁(yè)制作以及潢川網(wǎng)絡(luò)營(yíng)銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,潢川網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到潢川省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
答案取決于索引是創(chuàng)建主鍵時(shí)自動(dòng)創(chuàng)建的,還是創(chuàng)建主鍵前手工創(chuàng)建的。
測(cè)試如下:--建表create
table
hqy_test(id
integer)
;--建索引create
(unique)index
idx_hqy_id
on
hqy_test(id)
;--加主鍵alter
table
hqy_test
add
constraint
pk_hqy_id
primary
key
(id);
select
index_name
from
user_indexes
where
index_name='IDX_HQY_ID';IDX_HQY_ID
---刪除主鍵
alter
table
hqy_test
drop
constraint
pk_hqy_id;或者:alter
table
hqy_test
drop
primary
key;
也是行的。
select
index_name
from
user_indexes
where
index_name='IDX_HQY_ID';
IDX_HQY_ID
==沒有刪除索引
--刪除索引,增加主鍵并自動(dòng)創(chuàng)建索引
drop
index
idx_hqy_id;
alter
talbe
hqy_test
add
constraint
pk_hqy_id
primary
key(id)
using
index;
select
index_name
from
user_indexes
where
index_name='PK_HQY_ID';
PK_HQY_ID
==自動(dòng)創(chuàng)建了索引
--刪除主鍵約束
alter
table
hqy_test
drop
primary
key;
select
index_name
from
user_indexes
where
index_name='PK_HQY_ID';
無
==索引被刪除了
如果刪除主鍵時(shí),希望同時(shí)刪掉索引,則應(yīng)該增加drop
index選項(xiàng),從而不管索引是否是創(chuàng)建主鍵時(shí)自動(dòng)創(chuàng)建的,即:alter
table
hqy_test
drop
primary
key
drop
index;
MYSQL索引信息存儲(chǔ)在INFORMATION_SCHEMA.STATISTICS表里,如果要批量刪除索引(主鍵除外)則可通過其構(gòu)建批量刪除sql。下面是我刪除pafss庫(kù)中所有以j_打頭的表的索引的sql。批量刪除主鍵可以通過第二個(gè)sql,但是自增列不能通過這種方式刪除。
1、SELECT?DISTINCT?(CONCAT('drop?index?',?INDEX_NAME,?'?on?',?TABLE_NAME,?';'))
FROM?INFORMATION_SCHEMA.STATISTICS?T
WHERE?T.TABLE_SCHEMA?=?'pafss'
AND?T.TABLE_NAME?LIKE?'j_%'
AND?T.INDEX_NAME??'PRIMARY';
2、SELECT??DISTINCT(concat('alert?table?',?TABLE_NAME?,'?drop?primary?key?;')),t.*
FROM?INFORMATION_SCHEMA.STATISTICS?T
WHERE?T.TABLE_SCHEMA?=?'pafss'
AND?T.TABLE_NAME?LIKE?'j_%'
AND?T.INDEX_NAME?=?'PRIMARY'
索引的創(chuàng)建可以在CREATE TABLE語(yǔ)句中進(jìn)行,也可以單獨(dú)用CREATE INDEX或ALTER TABLE來給表增加索引。刪除索引可以利用ALTER TABLE或DROP INDEX語(yǔ)句來實(shí)現(xiàn)。
語(yǔ)法如下:
alter table table_name add index index_name (column_list) ;
alter table table_name add unique (column_list) ;
alter table table_name add primary key (column_list) ;
其中包括普通索引、UNIQUE索引和PRIMARY KEY索引3種創(chuàng)建索引的格式,table_name是要增加索引的表名,column_list指出對(duì)哪些列進(jìn)行索引,多列時(shí)各列之間用逗號(hào)分隔。
索引名index_name可選,缺省時(shí),MySQL將根據(jù)第一個(gè)索引列賦一個(gè)名稱。另外,ALTER TABLE允許在單個(gè)語(yǔ)句中更改多個(gè)表,因此可以同時(shí)創(chuàng)建多個(gè)索引。
1、如圖為MySQL刪除唯一索引的基本語(yǔ)法。
2、為了便于演示,我們需要根據(jù)圖示代碼創(chuàng)建一個(gè)唯一索引。
3、我們需要根據(jù)圖示代碼查看數(shù)據(jù)表當(dāng)前的索引情況。
4、我們需要根據(jù)圖示代碼輸入mysql刪除唯一索引。
5、確認(rèn)指令無誤,回車執(zhí)行即可。