唯一键(unique key)
唯一键:unique key,用来保证对应的字段中的数据唯一的
主键也可以用来保证字段数据唯一性,但是一张表只有一个主键。
1、唯一键在一张表中可以有多个
2、唯一键允许字段数据为NULL,NULL可以有多个(NULL不参与比较)
创建唯一键
创建唯一键与创建主键非常类似
1、直接在表字段之后增加唯一键标识符:unique[key]
2、在所有的字段之后使用unique key(字段列表)
3、在创建完表之后也可以增加唯一键
alter table 表名 add unique key(字段列表)
mysql> create table unique1(
-> id int primary key auto_increment,
-> username varchar(10) unique
-> )charset utf8;
Query OK, 0 rows affected (1.75 sec)
mysql> create table unique2(
-> id int primary key auto_increment,
-> username varchar(10),
-> unique key(username)
-> )charset utf8;
Query OK, 0 rows affected (1.87 sec)
mysql> create table unique3(
-> id int primary key auto_increment,
-> username varchar(10)
-> )charset utf8;
Query OK, 0 rows affected (1.82 sec)
-- mysql> alter table unique3 modify username int unique貌似也可以插入
mysql> alter table unique3 add unique key(username);
Query OK, 0 rows affected (0.46 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc unique3;
+----------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+---------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| username | int(11) | YES | UNI | NULL | |
+----------+---------+------+-----+---------+----------------+
2 rows in set (0.02 sec)
查看唯一键
唯一键是属性,可以通过查看表结构来实现
1、允许为空(null)
2、唯一键效果:在不为空的情况下,不允许重复
3、在查看表创建语句的时候,会看到与主键不同的一点,多出一个“名字”
mysql> show create table unique1;
+---------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+---------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| unique1 | CREATE TABLE `unique1` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(10) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `username` (`username`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 |
+---------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
删除唯一键
一个表中允许存在多个唯一键,如使用同主键一样的命令是错误的:alter table 表名 drop unique key //错误的,正确的应该是:
删除的基本语法:alter table 表名 drop index 唯一键名字
index关键字:索引,唯一键是索引的一种(作用是提升查询效率)
mysql> desc unique2;
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| username | varchar(10) | YES | UNI | NULL | |
+----------+-------------+------+-----+---------+----------------+
2 rows in set (0.02 sec)
mysql> alter table unique2 drop index username;
Query OK, 0 rows affected (1.81 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc unique2;
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| username | varchar(10) | YES | | NULL | |
+----------+-------------+------+-----+---------+----------------+
2 rows in set (0.02 sec)
复合唯一键
唯一键和主键一样可以使用多个字段来共同保证唯一性
一般主键都是单一字段(逻辑主键),而其他需要唯一性的内容都是由唯一键来处理。
版权声明:本文为no15870678621原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。