mysql索引的增刪改查怎么實(shí)現(xiàn)?

mysql中可使用“CREATE INDEX”語句來添加索引;使用“SHOW INDEX”語句來查看索引;使用“DROP INDEX”語句來對(duì)索引進(jìn)行刪除;而修改索引可以通過刪除原索引,再根據(jù)需要?jiǎng)?chuàng)建一個(gè)同名的索引,從而實(shí)現(xiàn)修改索引的操作。

mysql索引的增刪改查怎么實(shí)現(xiàn)?

(推薦教程:mysql視頻教程

mysql索引的創(chuàng)建

創(chuàng)建索引是指在某個(gè)表的一列或多列上建立一個(gè)索引,可以提高對(duì)表的訪問速度。創(chuàng)建索引對(duì) MySQL 數(shù)據(jù)庫的高效運(yùn)行來說是很重要的。

基本語法

MySQL 提供了三種創(chuàng)建索引的方法:

1) 使用 CREATE INDEX 語句

可以使用專門用于創(chuàng)建索引的 CREATE INDEX 語句在一個(gè)已有的表上創(chuàng)建索引,但該語句不能創(chuàng)建主鍵。

語法格式:

CREATE??ON??(?[]?[?ASC?|?DESC])

語法說明如下:

  • :指定索引名。一個(gè)表可以創(chuàng)建多個(gè)索引,但每個(gè)索引在該表中的名稱是唯一的。

  • :指定要?jiǎng)?chuàng)建索引的表名。

  • :指定要?jiǎng)?chuàng)建索引的列名。通常可以考慮將查詢語句中在 JOIN 子句和 WHERE 子句里經(jīng)常出現(xiàn)的列作為索引列。

  • :可選項(xiàng)。指定使用列前的 length 個(gè)字符來創(chuàng)建索引。使用列的一部分創(chuàng)建索引有利于減小索引文件的大小,節(jié)省索引列所占的空間。在某些情況下,只能對(duì)列的前綴進(jìn)行索引。索引列的長度有一個(gè)最大上限 255 個(gè)字節(jié)(MyISAM 和 InnoDB 表的最大上限為 1000 個(gè)字節(jié)),如果索引列的長度超過了這個(gè)上限,就只能用列的前綴進(jìn)行索引。另外,BLOB 或 TEXT 類型的列也必須使用前綴索引。

  • ASC|DESC:可選項(xiàng)。ASC指定索引按照升序來排列,DESC指定索引按照降序來排列,默認(rèn)為ASC。

2) 使用 CREATE TABLE 語句

索引也可以在創(chuàng)建表(CREATE TABLE)的同時(shí)創(chuàng)建。在 CREATE TABLE 語句中添加以下語句。語法格式:

CONSTRAINT?PRIMARY?KEY?[索引類型]?(,…)

在 CREATE TABLE 語句中添加此語句,表示在創(chuàng)建新表的同時(shí)創(chuàng)建該表的主鍵。

語法格式:

KEY?|?INDEX?[]?[]?(,…)

在 CREATE TABLE 語句中添加此語句,表示在創(chuàng)建新表的同時(shí)創(chuàng)建該表的索引。

語法格式:

UNIQUE?[?INDEX?|?KEY]?[]?[]?(,…)

在 CREATE TABLE 語句中添加此語句,表示在創(chuàng)建新表的同時(shí)創(chuàng)建該表的唯一性索引。

語法格式:

FOREIGN?KEY??

在 CREATE TABLE 語句中添加此語句,表示在創(chuàng)建新表的同時(shí)創(chuàng)建該表的外鍵。

在使用 CREATE TABLE 語句定義列選項(xiàng)的時(shí)候,可以通過直接在某個(gè)列定義后面添加 PRIMARY KEY 的方式創(chuàng)建主鍵。而當(dāng)主鍵是由多個(gè)列組成的多列索引時(shí),則不能使用這種方法,只能用在語句的最后加上一個(gè) PRIMARY KRY(,…) 子句的方式來實(shí)現(xiàn)。

3) 使用 ALTER TABLE 語句

CREATE INDEX 語句可以在一個(gè)已有的表上創(chuàng)建索引,ALTER TABLE 語句也可以在一個(gè)已有的表上創(chuàng)建索引。在使用 ALTER TABLE 語句修改表的同時(shí),可以向已有的表添加索引。具體的做法是在 ALTER TABLE 語句中添加以下語法成分的某一項(xiàng)或幾項(xiàng)。

語法格式:

ADD?INDEX?[]?[]?(,…)

在 ALTER TABLE 語句中添加此語法成分,表示在修改表的同時(shí)為該表添加索引。

語法格式:

ADD?PRIMARY?KEY?[]?(,…)

在 ALTER TABLE 語句中添加此語法成分,表示在修改表的同時(shí)為該表添加主鍵。

語法格式:

ADD?UNIQUE?[?INDEX?|?KEY]?[]?[]?(,…)

在 ALTER TABLE 語句中添加此語法成分,表示在修改表的同時(shí)為該表添加唯一性索引。

語法格式:

ADD?FOREIGN?KEY?[]?(,…)

在 ALTER TABLE 語句中添加此語法成分,表示在修改表的同時(shí)為該表添加外鍵。

mysql索引的查看

索引創(chuàng)建完成后,可以利用 SQL 語句查看已經(jīng)存在的索引。在 MySQL 中,可以使用 SHOW INDEX 語句查看表中創(chuàng)建的索引。

查看索引的語法格式如下:

SHOW?INDEX?FROM??[?FROM?]

語法說明如下:

  • :指定需要查看索引的數(shù)據(jù)表名。

  • :指定需要查看索引的數(shù)據(jù)表所在的數(shù)據(jù)庫,可省略。比如,SHOW INDEX FROM student FROM test; 語句表示查看 test 數(shù)據(jù)庫中 student 數(shù)據(jù)表的索引。

示例

SQL 語句和運(yùn)行結(jié)果如下所示。

mysql>?SHOW?INDEX?FROM?tb_stu_info2G ***************************?1.?row?*************************** ????????Table:?tb_stu_info2 ???Non_unique:?0 ?????Key_name:?height ?Seq_in_index:?1 ??Column_name:?height ????Collation:?A ??Cardinality:?0 ?????Sub_part:?NULL ???????Packed:?NULL ?????????Null:?YES ???Index_type:?BTREE ??????Comment: Index_comment: 1?row?in?set?(0.03?sec)

mysql索引的修改和刪除

刪除索引是指將表中已經(jīng)存在的索引刪除掉。不用的索引建議進(jìn)行刪除,因?yàn)樗鼈儠?huì)降低表的更新速度,影響數(shù)據(jù)庫的性能。對(duì)于這樣的索引,應(yīng)該將其刪除。

在 MySQL 中修改索引可以通過刪除原索引,再根據(jù)需要?jiǎng)?chuàng)建一個(gè)同名的索引,從而實(shí)現(xiàn)修改索引的操作。

基本語法

當(dāng)不再需要索引時(shí),可以使用 DROP INDEX 語句或 ALTER TABLE 語句來對(duì)索引進(jìn)行刪除。

1) 使用 DROP INDEX 語句

語法格式:

DROP?INDEX??ON?

語法說明如下:

  • :要?jiǎng)h除的索引名。

  • :指定該索引所在的表名。

2) 使用 ALTER TABLE 語句

根據(jù) ALTER TABLE 語句的語法可知,該語句也可以用于刪除索引。具體使用方法是將 ALTER TABLE 語句的語法中部分指定為以下子句中的某一項(xiàng)。

  • DROP PRIMARY KEY:表示刪除表中的主鍵。一個(gè)表只有一個(gè)主鍵,主鍵也是一個(gè)索引。

  • DROP INDEX index_name:表示刪除名稱為 index_name 的索引。

  • DROP FOREIGN KEY fk_symbol:表示刪除外鍵。

注意:如果刪除的列是索引的組成部分,那么在刪除該列時(shí),也會(huì)將該列從索引中刪除;如果組成索引的所有列都被刪除,那么整個(gè)索引將被刪除。

刪除索引

【實(shí)例 1】刪除表 tb_stu_info 中的索引,輸入的 SQL 語句和執(zhí)行結(jié)果如下所示。

mysql>?DROP?INDEX?height ????->?ON?tb_stu_info; Query?OK,?0?rows?affected?(0.27?sec) Records:?0??Duplicates:?0??Warnings:?0 mysql>?SHOW?CREATE?TABLE?tb_stu_infoG ***************************?1.?row?*************************** ???????Table:?tb_stu_info Create?Table:?CREATE?TABLE?`tb_stu_info`?( ??`id`?int(11)?NOT?NULL, ??`name`?char(45)?DEFAULT?NULL, ??`dept_id`?int(11)?DEFAULT?NULL, ??`age`?int(11)?DEFAULT?NULL, ??`height`?int(11)?DEFAULT?NULL )?ENGINE=InnoDB?DEFAULT?CHARSET=gb2312 1?row?in?set?(0.00?sec)

【實(shí)例 2】刪除表 tb_stu_info2 中名稱為 id 的索引,輸入的 SQL 語句和執(zhí)行結(jié)果如下所示。

mysql>?ALTER?TABLE?tb_stu_info2 ????->?DROP?INDEX?height; Query?OK,?0?rows?affected?(0.13?sec) Records:?0??Duplicates:?0??Warnings:?0 mysql>?SHOW?CREATE?TABLE?tb_stu_info2G ***************************?1.?row?*************************** ???????Table:?tb_stu_info2 Create?Table:?CREATE?TABLE?`tb_stu_info2`?( ??`id`?int(11)?NOT?NULL, ??`name`?char(45)?DEFAULT?NULL, ??`dept_id`?int(11)?DEFAULT?NULL, ??`age`?int(11)?DEFAULT?NULL, ??`height`?int(11)?DEFAULT?NULL )?ENGINE=InnoDB?DEFAULT?CHARSET=gb2312 1?row?in?set?(0.00?sec)

以上就是

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊7 分享