唯一约束
唯一约束,其特点是:
不允许表中有重复记录;
允许表中有NULL记录;
创建唯一约束后,系统将自动创建唯一索引;
-- 创建数据表时添加列级唯一约束
CREATE TABLE t7(
id SMALLINT UNSIGNED PRIMARY KEY,
username VARCHAR(20) NOT NULL UNIQUE KEY,
email VARCHAR(30) NOT NULL UNIQUE KEY
);
DESC t7;
-- 创建数据表时添加表级唯一约束
CREATE TABLE t8(
id SMALLINT UNSIGNED PRIMARY KEY,
username VARCHAR(20) NOT NULL,
clASses VARCHAR(20) NOT NULL,
UNIQUE KEY (username,clASses)
);
DESC t8;
-- 创建表时,添加唯一约束
CREATE TABLE word05(
id INT(8) PRIMARY KEY,
name VARCHAR(30) UNIQUE,
sex CHAR(3),
age INT(3),
email VARCHAR(50),
address VARCHAR(50)
);
DESC word05;
INSERT INTO word05 VALUES(1,'rose','女',25,'rose@164.com','北京');
INSERT INTO word05 VALUES(2,'rose','男',20,'rose1@164.com','北京1');---错误
INSERT INTO word05(id,sex,age,email,address) VALUES(3,'男',20,'jack@164.com','上海');
修改表时,添加唯一约束
语法格式:
ALTER TABLE 表名 ADD UNIQUE(列名1,列名2,.....列名n);
-- 修改word05表,对email列添加唯一约束,并验证
ALTER TABLE word05 ADD UNIQUE(email);
DESC word05;
-- 修改word05表,对address列添加唯一约束,并验证
ALTER TABLE word05 ADD UNIQUE(address);
DESC word05;
删除唯一约束
语法格式:
ALTER TABLE 表名 DROP INDEX KEY_name值;
-- 查看KEY_name值格式:
SHOW KEYS FROM 表名;
-- 删除word05表中,name列上的唯一约束,并验证
-- (1) 查看name列对应的KEY_name值
SHOW KEYS FROM word05; --name
-- (2)根据语法格式删除
ALTER TABLE word05 DROP INDEX name;
-- (3)验证
DESC word05;
-- 删除word05表中,email列上的唯一约束,并验证
SHOW KEYS FROM word\G; -email
ALTER TABLE word05 DROP INDEX email;
DESC word05;
主键约束与唯一约束的区别
每张数据表只能有一个主键约束;但是可以存在多个唯一约束;
主键约束不能为空;唯一约束可以为空;