在MySQL中,唯一約束被用來保證在一張表中某一列上的數據不會重復。默認情況下,MySQL會在唯一約束上創建一個索引,以此來保證數據的唯一性。
CREATE TABLE my_table ( id INT NOT NULL PRIMARY KEY, name VARCHAR(255) UNIQUE );
在以上的創建表的語句中,我們定義了一個名為my_table的表,該表有兩列,分別是id和name。其中,name列被設置為唯一約束,這意味著name列上的值不能重復。
在執行以上語句之后,我們可以使用如下的SQL查詢來查看MySQL是否為name列創建了一個唯一索引:
SHOW INDEX FROM my_table;
執行以上查詢后,我們可以看到MySQL為name列自動創建了一個唯一索引,如下所示:
+----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | +----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | my_table | 0 | name | 1 | name | A | 0 | NULL | NULL | YES | BTREE | | | | my_table | 0 | PRIMARY | 1 | id | A | 0 | NULL | NULL | NO | BTREE | | | +----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
我們可以看到,其中Key_name列顯示了MySQL為name列創建了一個名為name的索引。
當然,如果我們想要在創建表的語句中,顯式地指定為該唯一約束創建一個索引,我們可以使用如下的語句:
CREATE TABLE my_table ( id INT NOT NULL PRIMARY KEY, name VARCHAR(255), UNIQUE INDEX name_unique (name) );
在以上的創建表的語句中,我們定義了一個名為my_table的表,該表有兩列,分別是id和name。其中,name列被設置為唯一約束,并且我們顯式地指定為該唯一約束創建一個名為name_unique的索引。
通過以上的方法,我們可以在MySQL中為唯一約束默認創建一個索引。對于需要保證數據唯一性的表,這種方式可以提高查詢的性能,并且避免數據重復的情況發生。
下一篇dockerlinks