我的编程空间,编程开发者的网络收藏夹
学习永远不晚

【MySQL】唯一性约束【UNIQUE】从基础到就业

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

【MySQL】唯一性约束【UNIQUE】从基础到就业

唯一约束 【unique】: 用来限制某个字段/某列的值不能重复,唯一约束允许出现 多个空值

同一个表可以有多个唯一约束;唯一约束可以是某一个列的值唯一,也可以多个列组合的值唯一。 唯一性约束允许列值为空;在创建唯一约束的时候,如果不给唯一约束命名,就默认和列名相同。 你给表创建唯一约束的时候,mysql会默认创建一个唯一索引。

设置了唯一索引的列可以插入 NULL 值,但不允许出现一张表中,某一列,设置了唯一约束,插入两条 NULL 

SELECT * FROM information_schema.table_constraints WHERE table_name = '表名'; #查看都有哪 些约束

 

创建一个表test4的表,将id 设置为 unique

唯一约束可以是某一个列的值唯一

CREATE TABLE test4(
id INT  UNIQUE  ,
`name` VARCHAR (15) ,
salary DECIMAL (10,2),
email VARCHAR(25)

在创建唯一约束的时候,如果不给唯一约束命名,就默认和列名相同 {列名是 id 约束名也是id }

 

 唯一约束可以是某一个列的值唯一,也可以多个列组合的唯一约束

 CREATE TABLE test6(
id INT ,
NAME VARCHAR(25),
PASSWORD VARCHAR(16),
-- 使用表级约束语法
 UNIQUE(NAME,PASSWORD)  # name 和password 两个列共同组合唯一约束 
)  

/*也可以给唯一约束起别名 语法:CONSTRAINT uq_test6  UNIQUE (NAME,PASSWORD)* /
)

 

 测试test4表插入id重复值是否成功

INSERT INTO test4 VALUES(1,'张三','80000','2320761223@qq.com');
INSERT INTO test4 VALUES(1,'王五','60000','3133425745@qq.com');

 提示错误: Duplicate entry '1' for key 'test4.id'   / 键“test4.id”的重复条目“1”

重点一: 但是在多列组合的唯一性约束中,可以插入成功

复合唯一约束:

复合唯一约束就是多列组合唯一约束,这个一个表中分别给多个列设置索引是不一样的,插入数据的效果也是不一样的  ,唯一约束 是表中同一列不许出现重复值,而复合唯一约束,只要在组成复合约束的组合字段有一个字段不同就可以插入,如果将三个字段设置成了复合唯一约束,插入两条数据哪怕有一个不一样都可以插入,插入两条数据 ,如果设置了复合唯一约束的三个字段都出现一样的话,那就要遵守唯一约束的规则不能插入重复值。

一张表中,给多个置唯一索引

 CREATE TABLE test8(
 id  INT UNIQUE , # 列级约束
 last_name VARCHAR(15)UNIQUE,
 salary DECIMAL (10,2),
 email VARCHAR(25)  UNIQUE
 )

一张表中给多个列设置组合索引:

 CREATE TABLE test9(
 id  INT ,
 last_name VARCHAR(15),
 salary DECIMAL (10,2),
 email VARCHAR(25),
 CONSTRAINT uq_test8_id_name_em  UNIQUE(id,last_name,email)

# CONSTRAINT uq_test8_id_name_em 给这个复合约束起了别名'uq_test8_id_name_em'  加不加这段都无所谓  不加的话复合约束的名称就成了 id了 ,详细原理文末讲解。

 )

给test6表的name  插入重复值是否成功 (前提 test6 的唯一约束,是由name 和password 两个列共同组合唯一约束)

 我不是给name 和password 设置了唯一性约束了吗,唯一性约束不是不允许插入重复值吗?

为什么会有两个'王阳', 这是因为前面讲的 多列组合的约束有一个特性,你设置了组合约束包含几列,只有表中出现多列组合约束的所有列值相同时那就会出错插不进去。

给表test 6插入 两条数据相同的数据 不要管 id = 1 因为我没给id设置任何约束它不受影响,主要看name password

INSERT INTO test6 VALUES(1,"张国立","12345");
INSERT INTO test6 VALUES(1,"张国立","12345")

 (2)创建表后还可以添加唯一键约束 

方式1: alter table 表名称 add unique key(字段列表);

方式2: alter table 表名称 modify 字段名 字段类型 unique

新建了一个表 test3 没有添加任何索引

CREATE TABLE test3(
 id  INT  ,
 last_name VARCHAR(15),
 salary DECIMAL (10,2),
 email VARCHAR(25)
 )

用add   和 MODIFY 给字段id 和 emai 分别加上唯一索引

 ALTER TABLE test3 
 ADD UNIQUE KEY(id)

 ALTER TABLE test3 MODIFY email VARCHAR(25) UNIQUE

删除唯一索引:

添加唯一性约束的列上也会自动创建唯一索引。

删除唯一约束只能通过删除唯一索引的方式删除。

删除时需要指定唯一索引名,唯一索引名就和唯一约束名一样。

索引名命名规则:

如果创建唯一约束时未指定名称,如果是单列,就默认和列名相同;

如果是组合列,那么默认和() 中排在第一个的列名相同。也可以自定义唯一性约束名

来源地址:https://blog.csdn.net/weixin_59131972/article/details/128418205

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

【MySQL】唯一性约束【UNIQUE】从基础到就业

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL 表字段唯一性约束设置方法unique

建表时加上唯一性约束CREATE TABLE `t_user` (????? `Id` int(11) NOT NULL AUTO_INCREMENT,??-- 自增????? `name` varchar(18) NOT NULL unique,??-- 唯
MySQL 表字段唯一性约束设置方法unique
2015-08-04

编程热搜

目录