MYSQL 唯一约束

132 篇文章 1 订阅
130 篇文章 2 订阅

一、唯一约束(UNIQUE)

唯一约束用来保证一列(或一组列)中的数据是唯一的。类似与主键,但是有以下区别:

  • 表可包含多个唯一约束,但每个表只允许一个主键。
  • 唯一约束列可包含 NULL 值。
  • 唯一约束列可修改或更新。
  • 唯一约束列的值可重复使用。
  • 唯一约束不能用来定义外键。

二、创建唯一约束

1、 定义表中单列的唯一约束

CREATE TABLE Employees
(
? ? social_num INTEGER UNIQUE
);

-- 给表的 social_num 列定义添加关键字 UNIQUE,使其成为唯一约束。如果在 social_num 列中插入或更新导致重复值的值,MySQL将发出错误消息并拒绝更改

2、定义表的唯一约束(单列)

CREATE TABLE Employees
(
   employee_name CHAR(50) NOT NULL,
   social_num INTEGER,
   phone INTEGER,
   UNIQUE (social_num)
);

-- 如果在 social_num 列中插入或更新导致重复值的值,MySQL将发出错误消息并拒绝更改

3、定义表的唯一约束(多列联合)

CREATE TABLE Employees
(
   employee_name CHAR(50) NOT NULL,
   social_num INTEGER,
   phone INTEGER,
   UNIQUE (employee_name, social_num)
);

-- 要求两个字段联合起来时唯一的,即employee_name + social_num 是唯一的

4、使用CONSTRAINT语法定义唯一约束(可指定约束名)

(1)创建表时定义

-- 创建表时定义
CREATE TABLE Employees
(
   employee_name CHAR(50) NOT NULL,
   social_num INTEGER,
   phone INTEGER UNIQUE,
   employee_address CHAR(255),
   CONSTRAINT name_address UNIQUE (employee_name, employee_address)
);


-- 插入数据
INSERT INTO Employees(employee_name, employee_address) VALUES('a', 'NJ');
  • 第一个UNIQUE约束应用于phone列,表示每个雇员必须具有不同的电话号码
  • 第二个UNIQUE约束名称为name_address,表示雇员employee_name可以重复,employee_address可以重复,但employee_name+employee_address必须唯一不可重复。例:a + NJ 和 a + SH
    a + NJ 和 b + NJ
    a + NJ 和 b + SH
    a + NJ 和 a + NJ 报错“1062 - Duplicate entry”

(2)在已创建好的表上加唯一约束

-- 在已创建好的表上加唯一约束,指定约束名为uni_name
ALTER TABLE Employees
ADD CONSTRAINT uni_name UNIQUE (employee_name);

-- 在已创建好的表上加唯一约束,不指定约束名
ALTER TABLE Employees
ADD UNIQUE (employee_name);

三、删除唯一约束

添加唯一约束时,MySQL将为数据库创建一个相应的 BTREE 索引,所以删除索引即可删除约束。通过如下命令查询索引:

SHOW INDEX FROM 表名;

-- 格式一:
DROP INDEX 约束名 ON 表名;
-- 例如:
DROP INDEX name_address ON Employees;

-- 格式二:
ALTER TABLE 表名
DROP INDEX 约束名; 
-- 例如:
ALTER TABLE Employees
DROP INDEX name_address;

参考学习链接:

mysql联合唯一约束_MySQL中添加唯一约束和联合唯一约束 - 百度文库

MySQL唯一约束 -MySQL教程?

先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值