【Java 进阶篇】MySQL约束详解

在这里插入图片描述

在数据库中,约束是一种用于定义表中数据规则和完整性的规范。它们用于确保数据的一致性和准确性。MySQL支持多种类型的约束,本文将详细介绍这些约束的种类和用法。

1. 什么是约束?

约束是一组规则,它们用于定义表中数据的规范,以确保数据的完整性和一致性。约束可以应用于表的列,以限制允许存储在这些列中的数据。如果数据不符合约束规则,将无法插入或更新到表中。

2. 约束的种类

MySQL支持多种类型的约束,以下是一些常见的约束类型:

2.1 主键约束(PRIMARY KEY)

主键约束用于唯一标识表中的每一行。主键列的值必须是唯一的,且不能包含NULL值。一张表只能有一个主键,通常是一个或多个列的组合。

示例:

CREATE TABLE Students (StudentID INT PRIMARY KEY,FirstName VARCHAR(50),LastName VARCHAR(50)
);

2.2 唯一约束(UNIQUE)

唯一约束用于确保列中的数据值是唯一的,但允许NULL值。一张表可以有多个唯一约束。

示例:

CREATE TABLE Employees (EmployeeID INT UNIQUE,FirstName VARCHAR(50),LastName VARCHAR(50)
);

2.3 外键约束(FOREIGN KEY)

外键约束用于建立表之间的关联关系。它指定了一个表中的列与另一个表中的列之间的关系。外键用于确保引用完整性,确保在引用表中的值在目标表中存在。

示例:

CREATE TABLE Orders (OrderID INT PRIMARY KEY,CustomerID INT,OrderDate DATE,FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)
);

2.4 检查约束(CHECK)

检查约束用于定义在插入或更新数据时必须满足的条件。它允许您自定义规则,以确保只有满足这些规则的数据才能插入或更新。

示例:

CREATE TABLE Products (ProductID INT PRIMARY KEY,ProductName VARCHAR(50),Price DECIMAL(10, 2),CHECK (Price >= 0)
);

2.5 默认约束(DEFAULT)

默认约束用于在未提供值的情况下为列分配默认值。如果未为列提供值,将使用默认值。

示例:

CREATE TABLE Students (StudentID INT PRIMARY KEY,FirstName VARCHAR(50),LastName VARCHAR(50),Gender VARCHAR(10) DEFAULT 'Unknown'
);

3. 约束的应用

在创建表时,可以将约束与列一起定义,也可以在表创建后使用ALTER TABLE语句添加约束。以下是一些约束的应用示例:

3.1 创建表时定义主键约束:

CREATE TABLE Employees (EmployeeID INT PRIMARY KEY,FirstName VARCHAR(50),LastName VARCHAR(50)
);

3.2 创建表后添加唯一约束:

ALTER TABLE Customers
ADD UNIQUE (Email);

3.3 创建表后添加外键约束:

ALTER TABLE OrderDetails
ADD FOREIGN KEY (ProductID) REFERENCES Products(ProductID);

3.4 创建表后添加检查约束:

ALTER TABLE Employees
ADD CHECK (Salary >= 0);

3.5 创建表时定义默认约束:

CREATE TABLE Students (StudentID INT PRIMARY KEY,FirstName VARCHAR(50),LastName VARCHAR(50),Gender VARCHAR(10) DEFAULT 'Unknown'
);

4. 约束的管理

可以使用ALTER TABLE语句来修改或删除表中的约束。以下是一些约束的管理示例:

4.1 修改主键约束:

ALTER TABLE Employees
DROP PRIMARY KEY,
ADD PRIMARY KEY (EmployeeID, DepartmentID);

4.2 删除唯一约束:

ALTER TABLE Customers
DROP INDEX Email;

4.3 修改外键约束:

ALTER TABLE OrderDetails
DROP FOREIGN KEY FK_ProductID,
ADD FOREIGN KEY (ProductID) REFERENCES NewProducts(ProductID);

4.4 删除检查约束:

ALTER TABLE Employees
DROP CHECK SalaryCheck;

4.5 修改默认约束:

ALTER TABLE Students
ALTER COLUMN Gender SET DEFAULT 'Other';

5. 约束的重要性

使用约束是数据库设计和管理中的关键部分。它们有助于确保数据的完整性、一致性和准确性。通过定义适当的约束,可以避免不良数据输入,并提高数据库的性能和可维护性。

6. 总结

在本文中,我们详细介绍了MySQL中的各种约束类型,包括主键约束、唯一约束、外键约束、检查约束和默认约束。我们还讨论了如何应用和管理这些约束,以及它们在数据库设计和管理中的重要性。希望本文能帮助您更好地理解和应用MySQL中的约束。

作者信息

作者 : 繁依Fanyi
CSDN: https://techfanyi.blog.csdn.net
掘金:https://juejin.cn/user/4154386571867191

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

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

相关文章

搭建好自己的PyPi服务器后怎么使用

当您成功搭建好自己的 PyPI 服务器后,您可以使用以下步骤来发布和使用您的包: 打包您的代码: 首先,将您的 Python 项目打包成一个发布包。确保您已经在项目根目录下创建了 setup.py 文件,并按照正确的格式填写了项目信…

[2023.09.25]:Rust编写基于web_sys的编辑器:输入光标再次定位的小结

前些天,写了探索Rust编写基于web_sys的WebAssembly编辑器:挑战输入光标定位的实践,经过后续的开发检验,我发现了一个问题,就是光标消失了。为了继续输入,用户需要再次使用鼠标点击。现在我已经弄清楚了导致…

【AI视野·今日Robot 机器人论文速览 第三十七期】Wed, 20 Sep 2023

AI视野今日CS.Robotics 机器人学论文速览 Wed, 20 Sep 2023 Totally 53 papers 👉上期速览✈更多精彩请移步主页 Daily Robotics Papers Machine Learning-Driven Burrowing with a Snake-Like Robot Authors Sean Even, Holden Gordon, Hoeseok Yang, Yasemin Ozk…

Nacos 实现服务平滑上下线(Ribbon 和 LB)

前言 不知道各位在使用 SpringCloud Gateway Nacos的时候有没有遇到过服务刚上线偶尔会出现一段时间的503 Service Unavailable,或者服务下线后,下线服务仍然被调用的问题。而以上问题都是由于Ribbon或者LoadBalancer的默认处理策略有关,其…

虚拟机数据恢复:Stellar Data Recovery for Virtual Machine

虚拟机数据恢复-----Crack Version Stellar Data Recovery for Virtual Machine 软件可从 VMware (.vmdk)、ORACLE (.vdi) 和 Microsoft (.vhd) 虚拟映像文件中恢复丢失和删除的数据。 从 VMDK、VDI 和 VHD 虚拟映像文件中恢复数据提供原始恢复选项来恢复数据从已删除或无法识…

原型模式 创建型模式之二

一、原型(Prototype)模式概述 DP书上的定义为:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。其中有一个词很重要,那就是拷贝(既clone)。可以说,拷贝(clone)是原型模式的精髓所在。其中…

ACM MM 2023 | 基于去中心化表征的人体姿态估计方法

01. 前言 北京邮电大学与EVOL创新团队共同提出人体姿态估计方法DecenterNet,用于在提高在拥挤场景下人体姿态估计的准确度。该方法引入了一种去中心化的姿势表征方法,使得网络在纠缠区域/拥挤区域中将更加稳健地表达人体姿态。该方法还提出了一个解耦的…

2023-9-28 JZ7 重建二叉树

题目链接:重建二叉树 import java.util.*;/** public class TreeNode {* int val 0;* TreeNode left null;* TreeNode right null;* public TreeNode(int val) {* this.val val;* }* }*/public class Solution {/*** 代码中的类名、方法名、参数…

使用ElementUI完成登入注册的跨域请求提高开发效率

🎬 艳艳耶✌️:个人主页 🔥 个人专栏 :《Spring与Mybatis集成整合》​​​​​​​ ⛺️ 生活的理想,为了不断更新自己 ! 目录 ​编辑 1、前言 1.1.什么是ELementUI 2、完成登陆注册前端页面 2.1环境搭建 运行…

Java高级特性-泛型继承与子类型

Java高级特性-泛型的继承与子类型 在Java中,泛型继承关系是通过使用类型参数来实现的。 类型参数是一种在编译时指定类型的机制,它使得我们可以在编写代码时使用一般化的类型,而不必关注具体的类型。泛型继承关系的基本语法为: public class MyClass<T> extends M…

跨境电商如何利用海外代理IP,提高竞争力?

随着经济全球化的深度发展&#xff0c;跨境电商已经成为外贸发展的主要赛道&#xff0c;跨境电商王者般的新业态&#xff0c;近年来&#xff0c;我国跨境电商发展得到政府的大力扶持。而代理IP也逐渐成为助力跨境业务的强大工具之一。可以为我们跨境电商种出现的如地域限制、安…

CentOS 7系统安装与配置、常用100条操作命令

CentOS 7 是一个广泛使用的开源 Linux 操作系统&#xff0c;它是 Red Hat Enterprise Linux (RHEL) 的一个免费重建版本&#xff0c;以稳定性和安全性而著称。在 CentOS 7 上安装虚拟机通常使用虚拟化技术&#xff0c;如 VirtualBox 或 VMware 等。以下是 CentOS 7 的简要介绍以…

Zilliz@阿里云:大模型时代下Milvus Cloud向量数据库处理非结构化数据的最佳实践

大模型时代下的数据存储与分析该如何处理?有没有已经落地的应用实践? 为探讨这些问题,近日,阿里云联合 Zilliz 和 Doris 举办了一场以《大模型时代下的数据存储与分析》为主题的技术沙龙,其中,阿里云对象存储 OSS 上拥有海量的非结构化数据,Milvus(Zilliz)作为全球最有…

C语言-控制语句

C语言中有三大结构&#xff0c;分别是顺序结构、选择结构和循环结构&#xff08;分支结构&#xff09;。 一、C 判断语句 判断结构要求程序员指定一个或多个要评估或测试的条件&#xff0c;以及条件为真时要执行的语句&#xff08;必需的&#xff09;和条件为假时要执行的语句…

解决使用flex布局引起的变形问题

只需在变形的样式中加以下代码&#xff0c;禁止拉伸就ok了 flex-shrink: 0;

ipaguard界面概览

ipaguard界面概览 ipaguard界面分左右2块&#xff1a;左边菜单导航栏&#xff0c;右边的功能区 左侧菜单&#xff1a;按模块分成启动界面&#xff0c;代码模块&#xff0c;文件模块&#xff0c;重签名与测试模块 右侧主功能区会随着功能变化&#xff0c;但是整体分3块&#xf…

此芯科技加入百度飞桨硬件生态共创计划,加速端侧AI生态布局

近日&#xff0c;此芯科技&#xff08;上海&#xff09;有限公司&#xff08;以下简称“此芯科技”&#xff09;与百度签署硬件生态共创计划合作协议&#xff0c;正式加入由百度发起的硬件生态共创计划。双方将共同推动端侧AI和大模型在个人计算、车载计算以及元宇宙计算等领域…

读取txt文档并解析数据输出

读取如下内容&#xff1a; [INFO] [2023927 13:23:04.303] [estimator.cpp:1894]: XYZI: 1.70492 -1.33857 1.99379 134 [INFO] [2023927 13:23:04.303] [estimator.cpp:1894]: XYZI: 1.70944 -1.32323 1.99325 125 [INFO] [2023927 13:23:04.303] [estimator.cpp:1892]: 1695…

【发版】java项目一键式发版,一键式发版脚本,如何实现一键式发版

0. 手动打包&#xff0c;jar包生产后 jenkins打包。 1. Dockerfile 文件&#xff1a; FROM openjdk:8MAINTAINER "维护者 <email>" RUN echo "Asia/Shanghai" > /etc/timezoneLABEL description"descr ... " ADD xxx-1.0.0-SNAPSHOT.…

BiMPM实战文本匹配【下】

引言 这是BiMPM实战文本匹配的第二篇文章。 注意力匹配 如上图所示&#xff0c;首先计算每个正向(或反向)上下文嵌入 h i p → \overset{\rightarrow}{\pmb h_i^p} hip​→​(或 h i p ← \overset{\leftarrow}{\pmb h_i^p} hip​←​)与另一句的每个正向(或反向)上下文嵌入 …