【重学 MySQL】六十三、唯一约束的使用

news2024/11/22 22:15:46

【重学 MySQL】六十三、唯一约束的使用

  • 创建表时定义唯一约束
    • 示例
  • 在已存在的表上添加唯一约束
    • 示例
  • 删除唯一约束
    • 示例
  • 复合唯一约束
    • 案例背景
    • 创建表并添加复合唯一约束
    • 插入数据测试
    • 总结
  • 特点
  • 注意事项

在这里插入图片描述
在 MySQL 中,唯一约束(UNIQUE Constraint)用于确保数据库表中的一列或多列的数据在整个表中是唯一的,即不允许有重复的值。唯一约束不仅可以在创建表时定义,也可以在表创建后通过修改表结构来添加。

创建表时定义唯一约束

在创建表时,可以通过 CREATE TABLE 语句中的 UNIQUE 关键字来定义唯一约束。

示例

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL UNIQUE,
    email VARCHAR(100) UNIQUE,
    password VARCHAR(100) NOT NULL
);

在这个示例中,usernameemail 列都被定义为唯一约束,这意味着在整个 users 表中,这两个字段的值必须是唯一的。

在已存在的表上添加唯一约束

如果表已经存在,可以使用 ALTER TABLE 语句来添加唯一约束。

示例

假设有一个已经存在的表 employees,我们想为 phone_number 列添加唯一约束:

ALTER TABLE employees
ADD CONSTRAINT unique_phone UNIQUE (phone_number);

或者,如果不使用命名约束(即匿名约束),可以简单地写为:

ALTER TABLE employees
ADD UNIQUE (phone_number);

删除唯一约束

要删除唯一约束,可以使用 ALTER TABLE 语句中的 DROP INDEX 子句(对于匿名约束)或 DROP CONSTRAINT 子句(对于命名约束)。

示例

假设我们有一个命名唯一约束 unique_phone,我们可以这样删除它:

ALTER TABLE employees
DROP CONSTRAINT unique_phone;

对于匿名唯一约束,我们需要知道约束的名称(MySQL 会在内部为匿名约束生成一个名称,通常是以 unique_ 开头,后跟列名和一些随机字符)。可以通过查询 information_schema 数据库中的 TABLE_CONSTRAINTS 表来找到这个名称。

SELECT CONSTRAINT_NAME
FROM information_schema.TABLE_CONSTRAINTS
WHERE TABLE_SCHEMA = 'your_database_name'
  AND TABLE_NAME = 'employees'
  AND CONSTRAINT_TYPE = 'UNIQUE';

找到约束名称后,可以使用 DROP INDEX 来删除它:

ALTER TABLE employees
DROP INDEX unique_phone_xxxx;  -- 替换为实际的约束名称

复合唯一约束

复合唯一约束是指在数据库中,对两个或多个列的组合设置唯一性约束,以确保这些列的组合在表中是唯一的。

案例背景

假设有一个名为students的学生表,用于存储学生的学号、姓名、班级编号和座位号。为了确保同一个班级中每个学生的座位号是唯一的,需要对班级编号座位号这两个列设置复合唯一约束。

创建表并添加复合唯一约束

可以使用以下SQL语句来创建students表,并添加复合唯一约束:

CREATE TABLE students (
    student_id INT PRIMARY KEY, -- 学号,主键
    name VARCHAR(50), -- 姓名
    class_id INT, -- 班级编号
    seat_number INT, -- 座位号
    UNIQUE KEY unique_class_seat (class_id, seat_number) -- 复合唯一约束
);

在上述SQL语句中,unique_class_seat是复合唯一约束的名称,它确保了class_idseat_number这两个列的组合在表中是唯一的。

插入数据测试

现在,可以尝试插入一些数据来测试复合唯一约束的效果:

-- 插入数据成功
INSERT INTO students (student_id, name, class_id, seat_number) VALUES (1, '张三', 101, 1);
INSERT INTO students (student_id, name, class_id, seat_number) VALUES (2, '李四', 101, 2);
INSERT INTO students (student_id, name, class_id, seat_number) VALUES (3, '王五', 102, 1);

-- 插入重复数据失败,因为班级编号101和座位号1的组合已经存在
INSERT INTO students (student_id, name, class_id, seat_number) VALUES (4, '赵六', 101, 1);

在上述插入操作中,前三个INSERT语句都成功执行,因为插入的数据没有违反复合唯一约束。而最后一个INSERT语句则失败,因为尝试插入的班级编号101和座位号1的组合已经存在于表中,违反了复合唯一约束。

总结

复合唯一约束是一种非常有用的数据库约束,它可以确保多个列的组合在表中是唯一的。在上面的案例中,通过对class_idseat_number这两个列设置复合唯一约束,确保了同一个班级中每个学生的座位号是唯一的。这有助于维护数据的完整性和准确性。

特点

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

注意事项

  1. NULL 值:唯一约束允许列中存在多个 NULL 值,因为 NULL 在 SQL 中表示“未知”,所以多个未知值并不冲突。
  2. 组合唯一约束:唯一约束可以定义在多个列上,确保这些列的组合在整个表中是唯一的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2203617.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

butterfly主题留言板 报错记录 未解决

新建留言板,在博客根目录执行下面的命令 hexo new page messageboard 在博客/source/messageboard的文件夹下找到index.md文件并修改 --- title: 留言板 date: 2018-01-05 00:00:00 type: messageboard ---找到butterfly主题下的_config.yml文件 把留言板的注释…

基于springboot+小程序的智慧物流管理系统(物流1)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 基于springboot小程序的智慧物流管理系统实现了管理员、司机及用户。 1、管理员实现了司机管理、用户管理、车辆管理、商品管理、物流信息管理、基础数据管理、论坛管理、公告信息管理等。…

帮助自闭症孩子融入社会,寄宿学校是明智选择

在广州这座充满活力与温情的城市,有一群特殊的孩子,他们被称为“星星的孩子”——自闭症儿童。自闭症,这个让人既陌生又熟悉的名词,背后承载的是无数家庭的辛酸与希望。对于自闭症儿童来说,融入社会、与人交流、理解世…

【Linux第一弹】- 基本指令

🌈 个人主页:白子寰 🔥 分类专栏:重生之我在学Linux,C打怪之路,python从入门到精通,数据结构,C语言,C语言题集👈 希望得到您的订阅和支持~ 💡 坚持…

blender 记一下lattice

这个工具能够辅助你捏形状 这里演示如何操作BOX shift A分别创建俩对象一个BOX 一个就是lattice对象 然后在BOX的修改器内 创建一个叫做lattice的修改器 然后指定object为刚刚创建的lattice对象 这样就算绑定好了 接下来 进入lattice的编辑模式下 你选取一个点进行运动&#…

量化交易与基础投资工具介绍

🌟作者简介:热爱数据分析,学习Python、Stata、SPSS等统计语言的小高同学~🍊个人主页:小高要坚强的博客🍓当前专栏:Python之机器学习《Python之量化交易》Python之机器学习🍎本文内容…

谈谈留学生毕业论文如何分析问卷采访数据

留学生毕业论文在设计好采访问题并且顺利进行了采访之后,我们便需要将得到的采访答案进行必要的分析,从而得出一些结论。我们可以通过这些结论回答研究问题,或者提出进一步的思考等等。那么我们应当如何分析采访数据呢?以下有若干…

python3开头如何设置utf-8

编码格式1&#xff1a; 在源文件第一行或者第二行定义&#xff1a; # coding<encoding name> 例如&#xff1a; # codingutf-8 编码格式2&#xff1a;&#xff08;这种最流行&#xff09; 格式如下&#xff1a; #!/usr/bin/python # -*- coding: <encoding name>…

信息安全工程师(43)入侵检测概述

一、定义与目的 入侵检测&#xff08;Intrusion Detection&#xff09;是指通过对行为、安全日志、审计数据或其他网络上可以获得的信息进行操作&#xff0c;检测到对系统的闯入或闯入的企图。其主要目的是确保网络安全和信息安全&#xff0c;保护个人和机构的敏感数据免受未经…

论文阅读:Split-Aperture 2-in-1 Computational Cameras (二)

Split-Aperture 2-in-1 Computational Cameras (一) Coded Optics for High Dynamic Range Imaging 接下来&#xff0c;文章介绍了二合一相机在几种场景下的应用&#xff0c;首先是高动态范围成像&#xff0c;现有的快照高动态范围&#xff08;HDR&#xff09;成像工作已经证…

FreeRTOS——任务创建(静态、动态创建)、任务删除以及内部实现剖析

任务创建和删除的API函数 任务的创建和删除本质就是调用FreeRTOS的API函数 API函数描述xTaskCreate()动态方式创建任务xTaskCreateStatic()静态方式创建任务vTaskDelete()删除任务 动态创建任务&#xff1a;任务的任务控制块以及任务的栈空间所需的内存&#xff0c;均有FreeR…

考研代码题:10.10 汉诺塔 爬楼梯 取球 猴子吃桃

汉诺塔 C语言 - 汉诺塔详解&#xff08;最简单的方法&#xff0c;进来看看就懂&#xff09;_汉诺塔c语言程序详解-CSDN博客 #include <stdio.h>void move(char begin,char end){printf("%c->%c\n",begin,end); } //begin开始杆&#xff0c;help辅助杆&am…

BUU刷题-Pwn-axb_2019_mips(MIPS跳转bss段执行shellcode)

解题所涉知识点&#xff1a; 泄露或修改内存数据&#xff1a; 堆地址&#xff1a;栈地址&#xff1a;libc地址&#xff1a;BSS段地址&#xff1a; 劫持程序执行流程&#xff1a;MIPS_ROP 获得shell或flag&#xff1a;[[MIPS_Shellcode]] && [[MIPS劫持RA寄存器]] 题…

开源文件管理工具File Browser本地部署并一键发布公网远程传输文件

文章目录 前言1.下载安装File Browser2.启动访问File Browser3.安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4.固定公网地址访问 前言 File Browser是一个开源的文件管理器和文件共享工具&#xff0c;它可以帮助用户轻…

波轮洗衣机、滚筒洗衣机的清理方法

洗衣机主要分为波轮式、滚筒式这2种&#xff0c;波轮式是水平旋转的&#xff0c;滚筒式是竖直旋转的。波轮式洗衣机一般比较小&#xff0c;用于2至3个人的衣服清理&#xff1b;而滚筒式洗衣机则比较大&#xff0c;用于5至6人的衣服清理。 图(1) 波轮洗衣机 图(2) 滚筒洗衣机 不…

龋齿牙齿病变图像分割系统源码&数据集分享

龋齿牙齿病变图像分割系统源码&#xff06;数据集分享 [yolov8-seg-C2f-DCNV3&#xff06;yolov8-seg-RepHGNetV2等50全套改进创新点发刊_一键训练教程_Web前端展示] 1.研究背景与意义 项目参考ILSVRC ImageNet Large Scale Visual Recognition Challenge 项目来源AAAI Glo…

发送邮件和随机码的生成

类视图和方法视图区别&#xff1a; 不需要装饰器&#xff0c;只需要继承MethodView,需要使用什么方式就写对应的方法名称&#xff0c;它就能自动匹配 app.route("/delete/",methods["DELETE"])这些就不用写了 但是不写装饰器并不意味着不写路由了&#xff…

高效美发店运营:SpringBoot管理系统详解

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理美发门店管理系统的相关信息成为必然。开发…

k8s部署学习

8s的架构 一个kubernetes集群主要是由控制节点(master)、工作节点(node)构成&#xff0c;每个节点上都会安装不同的组件 1 master&#xff1a;集群的控制平面&#xff0c;负责集群的决策 ApiServer : 资源操作的唯一入口&#xff0c;接收用户输入的命令&#xff0c;提供认证、…

MediaPlayer视频播放流程

MediaPlayer视频播放流程(基于Android8.0) 1. MediaPlayer源码分析 1.0 public class MediaPlayer extends PlayerBase implements SubtitleController.Listener, VolumeAutomation, AudioRoutingMediaPayer继承自PlayerBase类&#xff0c;分别实现了SubtitleController Volume…