先創建表 1.普通索引 是最基本的索引,它沒有任何的限制。有以下幾種創建方式 (1)直接創建索引: 實例: indexName為索引名,mytable表名,username和city為列名,10為首碼長度,即索引在該列從最左字元開始存儲的信息長度,單位位元組 如果是CHAR,VARCHAR類型,首碼長 ...
先創建表
mysql> CREATE TABLE test(
-> id INT,
-> username VARCHAR(16),
-> city VARCHAR(16),
-> age INT
-> );
1.普通索引
是最基本的索引,它沒有任何的限制。有以下幾種創建方式
(1)直接創建索引:
CREATE INDEX index_name ON table(column(length))
實例:
CREATE INDEX test_username ON test (username(10)); -->單列索引
indexName為索引名,mytable表名,username和city為列名,10為首碼長度,即索引在該列從最左字元開始存儲的信息長度,單位位元組
如果是CHAR,VARCHAR類型,首碼長度可以小於欄位實際長度;如果是BLOB和TEXT類型,必須指定 首碼長度,下同。
(2)修改表結構的方式添加索引
ALTER TABLE table_name ADD INDEX index_name ON (column(length))
ALTER TABLE test ADD INDEX test_username(username(10));
此處 indexName 索引名可不寫,系統自動賦名 username ,username_2 ,username_3,...
(3)創建表的時候同時創建索引
mysql> CREATE TABLE test( -> id INT, -> username VARCHAR(16), -> city VARCHAR(16), -> age INT, -> INDEX test_username (username(10)) -> );
2.唯一索引
與前面的普通索引類似,不同的就是:索引列的值必須唯一,但允許有空值。如果是組合索引,則列值的組合必須唯一。它有以下幾種創建方式:
(1)創建唯一索引
CREATE UNIQUE INDEX indexName ON table(column(length))
實例:
CREATE UNIQUE INDEX test_city ON test(city(10));
(2)修改表結構
ALTER TABLE table_name ADD UNIQUE indexName ON (column(length))
(3)創建表的時候直接指定
mysql> CREATE TABLE test( -> id INT, -> username VARCHAR(16), -> city VARCHAR(16), -> age INT, -> UNIQUE test_username (username(10)) -> );
3.主鍵索引
是一種特殊的唯一索引,一個表只能有一個主鍵,不允許有空值。一般是在建表的時候同時創建主鍵索引:
主鍵索引無需命名,一個表只能有一個主鍵。主鍵索引同時可是唯一索引或者全文索引,但唯一索引或全文索引不能共存在同一索引
(1)修改表結構創建
ALTER TABLE test ADD PRIMARY KEY (id);
(2)創建表的時候直接指定
mysql> CREATE TABLE test(
-> id INT,
-> username VARCHAR(16),
-> city VARCHAR(16),
-> age INT,
-> PRIMARY KEY(id)
-> );
```
4.組合索引
指多個欄位上創建的索引,只有在查詢條件中使用了創建索引時的第一個欄位,索引才會被使用。使用組合索引時遵循最左首碼集合
ALTER TABLE test ADD INDEX test_username_city (username,city);
5.全文索引
主要用來查找文本中的關鍵字,而不是直接與索引中的值相比較。fulltext索引跟其它索引大不相同,它更像是一個搜索引擎,而不是簡單的where語句的參數匹配。fulltext索引配合match against操作使用,而不是一般的where語句加like。它可以在create table,alter table ,create index使用,不過目前只有char、varchar,text 列上可以創建全文索引。值得一提的是,在數據量較大時候,現將數據放入一個沒有全局索引的表中,然後再用CREATE index創建fulltext索引,要比先為一張表建立fulltext然後再將數據寫入的速度快很多。
(1)直接創建
CREATE FULLTEXT INDEX full_username ON test (username);
(2)修改表結構添加全文索引
ALTER TABLE test ADD FULLTEXT INDEX full_city (city);
(3)創建表的時候直接指定
mysql> CREATE TABLE test(
-> id INT,
-> username VARCHAR(16),
-> city VARCHAR(16),
-> age INT,
-> FULLTEXT indexName (username(10))
-> );
6.查看索引
第一種:show create table test;
第二種:SHOW INDEX FROM test \G;
7.刪除索引
DROP INDEX index_name ON table;
ALTER TABLE test DROP PRIMARY KEY; -->刪除主鍵