mysql索引語法及示例


注:本篇文章是對菜鳥教程中的mysql索引(http://www.runoob.com/mysql/mysql-index.html)的翻譯版本;添加了示例,便於理解;

       索引分單列索引和組合索引。單列索引,即一個索引只包含單個列,一個表可以有多個單列索引,但這不是組合索引。組合索引,即一個索引包含多個列。

創建索引時,你需要確保該索引是應用在 SQL 查詢語句的條件(一般作為 WHERE 子句的條件)。

普通索引

創建索引

這是最基本的索引,它沒有任何限制。它有以下幾種創建方式:

CREATE INDEX indexName ON mytable(username(length));

注:indexName是索引名稱,username是字段名

如果是CHAR,VARCHAR類型,length可以小於字段實際長度;如果是BLOB和TEXT類型,必須指定 length。

舉例:

CREATE TABLE employee(
    id INT,
    sname VARCHAR(50),
    age INT ,
    PASSWORD VARCHAR(50)
);
#創建索引
CREATE INDEX index_sname ON employee(sname(20)); #注意添加索引的長度必須小於建表時給字段定義的長度,也可以不給長度,如:CREATE INDEX index_sname ON employee(sname);
#刪除索引 DROP INDEX index_sname ON employee;

修改表結構(添加索引)

ALTER table tableName ADD INDEX indexName(columnName)
舉例:
ALTER TABLE employee ADD INDEX  index_sname(sname);#這里可以不指定索引的長度

創建表的時候直接指定

CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, INDEX [indexName] (username(length)) );

舉例:
CREATE TABLE teacher(  
    id INT NOT NULL,   
    teachername VARCHAR(16) NOT NULL,  
    INDEX index_teachername(teachername(5))  
);

CREATE TABLE tea(  
    id INT NOT NULL,   
    teaname VARCHAR(16) NOT NULL,  
    INDEX (teaname)  
);

刪除索引的語法

DROP INDEX [indexName] ON mytable;

舉例:
DROP INDEX index_sname ON employee;

唯一索引

它與前面的普通索引類似,不同的就是:索引列的值必須唯一,但允許有空值。如果是組合索引,則列值的組合必須唯一。它有以下幾種創建方式:

創建索引

CREATE UNIQUE INDEX indexName ON mytable(username(length))
舉例:
CREATE TABLE tea(  
    id INT NOT NULL,   
    teaname VARCHAR(16) NOT NULL,  
    INDEX (teaname)  
);

CREATE UNIQUE INDEX index_teaname ON tea(teaname(4));
CREATE UNIQUE INDEX index_teaname ON tea(teaname);#也可以不給長度

修改表結構

ALTER table mytable ADD UNIQUE [indexName] (username(length))
舉例:
CREATE TABLE student(
    sid  INT PRIMARY KEY AUTO_INCREMENT,
    sname VARCHAR(50) NOT NULL COMMENT "學生姓名",
    age  VARCHAR(50) NOT NULL COMMENT "學生年齡"
);

ALTER  TABLE student ADD UNIQUE index_sname (sname(20));

ALTER  TABLE student ADD UNIQUE(sname);##也可以不指定長度

DROP INDEX index_sname ON student;

SHOW INDEX FROM student;

創建表的時候直接指定

CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, UNIQUE [indexName] (username(length)) );
舉例:
CREATE TABLE cat(
    id INT ,
    catName VARCHAR(20),
    UNIQUE INDEX index_catName(catName(5))
);

CREATE TABLE dog(
    id INT ,
    dogName VARCHAR(20),
    UNIQUE INDEX index_dogName(dogName)
);

使用ALTER 命令添加和刪除索引

有四種方式來添加數據表的索引:

  • ALTER TABLE tbl_name ADD PRIMARY KEY (column_list): 該語句添加一個主鍵,這意味着索引值必須是唯一的,且不能為NULL。
  • ALTER TABLE tbl_name ADD UNIQUE index_name (column_list): 這條語句創建索引的值必須是唯一的(除了NULL外,NULL可能會出現多次)。
  • ALTER TABLE tbl_name ADD INDEX index_name (column_list): 添加普通索引,索引值可出現多次。
  • ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list):該語句指定了索引為 FULLTEXT ,用於全文索引。

      也可以一次性給多個列添加索引(多列索引)

  • ALTER TABLE table_name ADD INDEX index_name ( column1, column2, column3 ):  添加多列索引.

以下實例為在表中添加索引。

mysql> ALTER TABLE testalter_tbl ADD INDEX (c);
舉例:
CREATE TABLE student(
    sid  INT PRIMARY KEY AUTO_INCREMENT,
    sname VARCHAR(50) NOT NULL COMMENT "學生姓名",
    age  VARCHAR(50) NOT NULL COMMENT "學生年齡"
);
ALTER TABLE student ADD INDEX  index_sname(sname);

你還可以在 ALTER 命令中使用 DROP 子句來刪除索引。嘗試以下實例刪除索引:

mysql> ALTER TABLE testalter_tbl DROP INDEX c;
舉例:
ALTER TABLE student DROP INDEX index_sname;

使用 ALTER 命令添加和刪除主鍵

主鍵只能作用於一個列上,添加主鍵索引時,你需要確保該主鍵默認不為空(NOT NULL)。實例如下:

mysql> ALTER TABLE testalter_tbl MODIFY i INT NOT NULL;#先修改為--不為空 mysql> ALTER TABLE testalter_tbl ADD PRIMARY KEY (i);#然后添加主鍵
舉例:
CREATE TABLE cat(
    id INT ,
    catName VARCHAR(20),
    UNIQUE INDEX index_catName(catName(5))
);
ALTER TABLE cat MODIFY id INT NOT NULL;

ALTER TABLE cat ADD PRIMARY KEY (id);

你也可以使用 ALTER 命令刪除主鍵:

mysql> ALTER TABLE testalter_tbl DROP PRIMARY KEY;
ALTER TABLE cat DROP PRIMARY KEY;

刪除主鍵時只需指定PRIMARY KEY(一個表只有一個主鍵),但在刪除索引時,你必須知道索引名。


顯示索引信息

你可以使用 SHOW INDEX 命令來列出表中的相關的索引信息。可以通過添加 \G 來格式化輸出信息。

嘗試以下實例:

mysql> SHOW INDEX FROM table_name;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM