唯一约束 【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

3. 删除唯一索引:

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

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

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

索引名命名规则:

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

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

【MySQL】唯一性约束【UNIQUE】从基础到就业相关推荐

  1. MySQL删除唯一性约束unique

    先查看创建表: show create table humanidentity.citycode;drop index citycode_2 on humanidentity.citycode;dro ...

  2. 删除唯一性约束unique

    删除唯一性约束 语法如下: alter table tableName drop index key_name;#删除唯一性约束,实际就是删除索引 drop index key_name on tab ...

  3. Oracle之唯一性约束(UNIQUE Constraint)使用方法具体解释

    Oracle | PL/SQL唯一索引(Unique Constraint)使用方法 1 目标 用演示样例演示怎样创建.删除.禁用和使用唯一性约束. 2 什么是唯一性约束? 唯一性约束指表中一个字段或 ...

  4. mysql 唯一性约束报错_怪异的MySQL Online DDL报错Duplicate entry

    今天线上执行Online DDL的时候发现一个奇怪的报错,觉得比较意义,遂整理如下.线上数据库版本:percona server 5.7.14 报错现场:每次执行的时候重复报错记录都不一样 mysql ...

  5. Oracle之唯一性约束(UNIQUE Constraint)用法详解

    Oracle | PL/SQL唯一索引(Unique Constraint)用法 1 目标 用示例演示如何创建.删除.禁用和使用唯一性约束. 2 什么是唯一性约束? 唯一性约束指表中一个字段或者多个字 ...

  6. mysql唯一性约束冲突_如何解决逻辑删除与数据库唯一约束冲突

    前言 不知道大家有没有遇到这么一种业务场景,在业务中有个唯一约束A,当该业务进行逻辑删除后(设置标记为删除状态),再往唯一约束列插入相同的值时,此时会报Duplicate entry,但在业务上,该值 ...

  7. mysql建立学号与课程编号的索引_数据库mysql 四约束 三范式 六索引

    mysql 四约束 三范式 六索引 1.MySQL 约束 1.约束的作用 分类 表列的primary key主键,unique唯一键,not null非空等修饰符常常被称作约束(constraint) ...

  8. MySQL基础——DDL语言学习\数据库的建立\MySQL数据类型\MySQL常见约束\表的增删改

    接上篇文章 MySQL基础--数据库和SQL概述\MySQL基本使用\DQL语言学习 DDL语言学习 Data Definition Language 数据定义语言 主要用于数据库和数据表的管理和操作 ...

  9. mysql中ak替换键_数据库:唯一性约束_alternate key(替换键) mySQL Oracle 数据库 ak 唯一性约束...

    数据库:唯一性约束_alternate key(替换键) mySQL Oracle 数据库 ak 唯一性约束 数据库:唯一性约束 所谓唯一性约束(unique constraint)不过是数据表内替代 ...

  10. mysql中主键约束和唯一约束的区别_主键约束和唯一性约束的区别

    1.主键约束(PRIMARY KEY) 1) 主键用于唯一地标识表中的每一条记录,可以定义一列或多列为主键. 2) 是不可能(或很难)更新. 3) 主键列上没有任何两行具有相同值(即重复值),不允许空 ...

最新文章

  1. 为什么在中国“公有云”落地那么难?
  2. centos 6.x 升级内核
  3. 数字滤波器的差分方程和传递函数
  4. 信息学奥赛一本通C++语言——1002:输出第二个整数
  5. [转]HttpWatch工具简介及使用技巧
  6. C#启动前为所有的Form设置统一的Icon
  7. opencv_判断两张图片是否相同
  8. oracle的sql字符串转义,sql – 在Oracle数据库中搜索带转义的字符串
  9. QML用openGL渲染NV12
  10. RTKLIB学习:数据下载和数据转换
  11. html设置字体样式罗马,罗马字体英文
  12. ubuntu虚拟机ping通内网
  13. Python数模笔记-NetworkX(5)关键路径法
  14. 如何搭建一个自己的FTP服务器
  15. 即时聊天工具二次开发
  16. node中使用es6语法
  17. SpringBoot核心技术
  18. 【SCF CLI实践】腾讯云serverless + 企业微信群机器人,轻松解决告警通知问题
  19. IntelliJ IDEA好用的插件:笔记
  20. EDB PPAS(Oracle 兼容版) Oracle与PostgreSQL 兼容模式的参数配置切换

热门文章

  1. 华附计算机学神,【学习】时隔13年,华附两牛娃杀进奥数国家队,父母亲述学霸成长史!...
  2. 自媒体爆文素材网站有哪些?分享3个实用网站!
  3. 区块链投资机构风起云涌 Mixed Elements为何能更胜一筹!
  4. Node:(番外篇) 如何使用Nodejs向指定邮箱发送邮件
  5. 126篇殿堂级深度学习论文分类整理 从入门到应用
  6. 奇数下标都是奇数或者偶数下标都是偶数(Java)
  7. 基于JSP的网络音乐KTV点歌电台网站
  8. android番茄钟计时器
  9. 在外行人眼中的程序员
  10. 围棋GUI界面Sabaki的安装与使用