作用
关键字
特点
- 同一个表可以有多个唯一约束。
- 唯一约束可以是某一个列的值唯一,也可以多个列组合的值唯一。
- 唯一性约束允许列值为空。
- 在创建唯一约束的时候,如果不给唯一约束命名,就默认和列名相同。
- MySQL会给唯一约束的列上默认创建一个唯一索引。
添加唯一约束
创建表时
```sql CREATE TABLE test2( id INT UNIQUE, #列级约束 last_name VARCHAR(15) , email VARCHAR(25), salary DECIMAL(10,2),表级约束
CONSTRAINT uk_test2_email UNIQUE(email) );uk_test2_email为约束别名
在创建唯一约束的时候,如果不给唯一约束命名,就默认和列名相同。
desc test2;
INSERT INTO test2(id,last_name,email,salary) VALUES(1,’Tom’,’tom@126.com’,4500);
id重复
错误: Duplicate entry ‘1’ for key ‘id’
INSERT INTO test2(id,last_name,email,salary) VALUES(1,’Tom1’,’tom1@126.com’,4600);
email重复
错误:Duplicate entry ‘tom@126.com’ for key ‘uk_test2_email’
INSERT INTO test2(id,last_name,email,salary) VALUES(2,’Tom1’,’tom@126.com’,4600);
可以向声明为unique的字段上添加null值。而且可以多次添加null
INSERT INTO test2(id,last_name,email,salary) VALUES(2,’Tom1’,NULL,4600);
INSERT INTO test2(id,last_name,email,salary) VALUES(3,’Tom2’,NULL,4600);
SELECT * FROM test2;
<a name="I3ttg"></a>
## 在alter table时
```sql
DESC test2;
UPDATE test2
SET salary = 5000
WHERE id = 3;
#方式1:
# 原表中salary数据不允许有重复值,否则执行报错!!!
ALTER TABLE test2
ADD CONSTRAINT uk_test2_sal UNIQUE(salary);
#方式2:
ALTER TABLE test2
MODIFY last_name VARCHAR(15) UNIQUE;
字段列表中如果是一个字段,表示该列的值唯一。如果是两个或更多个字段,那么复合唯一,即多个字段的组合是唯一的 方式1: alter table 表名称 add unique key(字段列表);
方式2: alter table 表名称 modify 字段名 字段类型 unique;
复合的唯一性约束
CREATE TABLE USER(
id INT,
`name` VARCHAR(15),
`password` VARCHAR(25),
# 两个字段合在一起建立唯一性约束
# 表级约束
CONSTRAINT uk_user_name_pwd UNIQUE(`name`,`password`)
);
INSERT INTO USER
VALUES(1,'Tom','abc');
#可以成功的:
INSERT INTO USER
VALUES(1,'Tom1','abc');
SELECT *
FROM USER;
删除唯一约束
- 添加唯一性约束的列上也会自动创建唯一索引。
- 删除唯一约束只能通过删除唯一索引的方式删除。
- 删除时需要指定唯一索引名,唯一索引名就和唯一约束名一样。
- 如果创建唯一约束时未指定名称,如果是单列,就默认和列名相同;如果是组合列,那么默认和( )中排在第一个的列名相同。也可以自定义唯一性约束名。 ```sql SELECT * FROM information_schema.table_constraints WHERE table_name = ‘test2’;
删除唯一性索引
ALTER TABLE test2 DROP INDEX last_name;
desc test2; ```