MySQL中的约束

目录

      • 1. 主键约束(PRIMARY KEY)
      • 2. 唯一约束(UNIQUE)
      • 3. 外键约束(FOREIGN KEY)
      • 4. 非空约束(NOT NULL)
      • 5. 默认约束(DEFAULT)
      • 6. 检查约束(CHECK)
      • 总结

在MySQL中,约束(constraints)是用来确保数据库中 数据的完整性和一致性的规则。约束可以防止不合法的数据被插入到数据库中,保证数据的准确性和可靠性。作为数据库专家,我们需要充分理解和正确使用这些约束,以维护数据库的高质量数据。以下是MySQL中主要约束的作用和解释:

1. 主键约束(PRIMARY KEY)

主键约束用于唯一标识表中的每一行。每个表只能有一个主键,并且主键列中的值必须是唯一的且不能为空。

  • 作用:确保每一行都有唯一的标识符,防止重复数据,并且提供快速的行查找能力。
  • 示例
    CREATE TABLE Students (
        StudentID INT NOT NULL,
        Name VARCHAR(100),
        Age INT,
        PRIMARY KEY (StudentID)
    );
    

2. 唯一约束(UNIQUE)

唯一约束确保列中的所有值都是唯一的,允许列中存在NULL值(但每列中只能有一个NULL值)。

  • 作用防止重复数据的插入,确保列中数据的唯一性。
  • 示例
    CREATE TABLE Employees (
        EmployeeID INT NOT NULL,
        Email VARCHAR(255) UNIQUE,
        Name VARCHAR(100),
        PRIMARY KEY (EmployeeID)
    );
    

3. 外键约束(FOREIGN KEY)

外键约束用于建立和保持两个表之间的关系。外键列中的值必须是另一个表中主键列的值,或者是NULL。

  • 作用:确保数据的引用完整性,防止孤立或无效的引用,维护表之间的数据一致性。
  • 示例
    CREATE TABLE Orders (
        OrderID INT NOT NULL,
        CustomerID INT,
        OrderDate DATE,
        PRIMARY KEY (OrderID),
        FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)
    );
    

4. 非空约束(NOT NULL)

非空约束确保列不能包含NULL值,即每个插入的记录必须在该列中有值。

  • 作用:确保列中不允许有NULL值,以保证数据的完整性。
  • 示例
    CREATE TABLE Products (
        ProductID INT NOT NULL,
        Name VARCHAR(100) NOT NULL,
        Price DECIMAL(10, 2) NOT NULL,
        PRIMARY KEY (ProductID)
    );
    

5. 默认约束(DEFAULT)

默认约束为列指定默认值,如果在插入记录时没有提供该列的值,则使用默认值。

  • 作用提供默认值,简化数据输入并确保列中有合理的默认数据。
  • 示例
    CREATE TABLE Accounts (
        AccountID INT NOT NULL,
        Balance DECIMAL(10, 2) DEFAULT 0.00,
        PRIMARY KEY (AccountID)
    );
    

6. 检查约束(CHECK)

检查约束用于确保列中的值满足指定的条件。MySQL从8.0.16版本开始正式支持CHECK约束。

  • 作用:限制列中的值,使其符合特定条件,以保证数据的有效性和合理性。
  • 示例
    CREATE TABLE Employees (
        EmployeeID INT NOT NULL,
        Age INT,
        Salary DECIMAL(10, 2),
        PRIMARY KEY (EmployeeID),
        CHECK (Age >= 18 AND Salary > 0)
    );
    

总结

在MySQL中,约束是保证数据库数据完整性和一致性的重要机制。通过正确使用这些约束,数据库专家可以有效防止不合法数据的插入,维护数据库的高质量和可靠性。在设计和实现数据库时,必须充分考虑和应用这些约束,以确保数据的准确性和业务逻辑的正确性。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

论文解析——FTRANS: Energy-Efficient Acceleration of Transformers using FPGA

作者及发刊详情 Li B , Pandey S , Fang H ,et al.FTRANS: energy-efficient acceleration of transformers using FPGA[J].ACM, 2020.DOI:10.1145/3370748.3406567. 摘要 正文 主要工作贡献 与CPU和GPU在执行Transformer和RoBERTa相比,提出的FTRANS框架获得了…

ansible常见问题配置好了密码还是报错

| FAILED! > { “msg”: “Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this. Please add this host’s fingerprint to your known_hosts file to manage this host.” } 怎么解决&#xf…

[终端安全]-3 移动终端之硬件安全(TEE)

(参考资料:TrustZone for V8-A. pdf,来源ARM DEVELOPER官网) TEE(Trusted Execution Environment,可信执行环境)是用于执行敏感代码和处理敏感数据的独立安全区域;以ARM TrustZone为…

分布式技术栈、微服务架构 区分

1.分布式技术栈 这些技术栈都是为了更好的开发分布式架构的项目。 (大营销平台的系统框架如下图,扩展的分布式技术栈) (1)Dubbo——分布式技术栈 DubboNacos注册中心是应用可以分布式部署,并且提供RPC接…

HTML5使用<pre>标签:保留原始排版方式

在网页创作中,一般是通过各种标记对文字进行排版的。但是在实际应用中,往往需要一些特殊的排版效果,这样使用标记控制起来会比较麻烦。解决的方法就是保留文本格式的排版效果,如空格、制表符等。 如果要保留原始的文本排版效果&a…

redis并发、穿透、雪崩

Redis如何实现高并发 首先是单线程模型:redis采用单线程可以避免多线程下切换和竞争的开销,提高cpu的利用率,如果是多核cpu,可以部署多个redis实例。基于内存的数据存储:redis将数据存储在内存中,相比于硬…

回溯算法-以景点门票销售管理系统为例

1.回溯算法介绍 1.来源 回溯算法也叫试探法,它是一种系统地搜索问题的解的方法。 用回溯算法解决问题的一般步骤: 1、 针对所给问题,定义问题的解空间,它至少包含问题的一个(最优)解。 2 、确定易于搜…

唤醒知识循环,共筑绿色阅读梦——探索旧书回收小程序的无限可能

在这个信息爆炸的时代,书籍作为知识与智慧的载体,其重要性不言而喻。然而,随着电子阅读的兴起和书籍更新换代的加速,大量旧书被束之高阁,甚至面临被遗弃的命运。这不仅是对宝贵文化资源的浪费,也是对环境保…

12 电商高并发缓存实战

序章 项目代码缓存的数据一致性 延时双删 淘汰缓存写数据库休眠1s,再次淘汰缓存缺点:如果mysql是主从复制,去从库中拿去数据,此时同步数据还未完成,拿到的数据是旧数据。 先更新 DB,后删除缓存 采用异步延时删除策略. ①利用消息队列进行删除的补偿。②Mysql 数据库更新操…

Android项目中,查看项目依赖树的多种方式

1.使用预设的Task来进行查看 1.1 命令行 查看某个模块的所有依赖树: gradlew [模块名称]:dependencies 例如:gradlew app:dependencies查看某个模块的某功能的依赖树: gradlew [模块名称]:dependencies --configuration [功能名称] 例如&…

华为路由器静态路由配置(eNSP模拟实验)

实验目标 如图下所示&#xff0c;让PC1ping通PC2 具体操作 配置PC设备ip 先配置PC1的ip、掩码、网关。PC2也做这样的配置 配置路由器ip 配置G0/0/0的ip信息 #进入系统 <Huawei>system-view #进入GigabitEthernet0/0/0接口 [Huawei]int G0/0/0 #设置接口的ip和掩码 […

排序 -- 万能测试oj

. - 力扣&#xff08;LeetCode&#xff09; 这道题我们可以使用我们学过的那些常见的排序方法来进行解答 //插入排序 void InsertSort(int* nums, int n) {for (int i 0; i < n-1; i){int end i;int tmp nums[end 1];while (end > 0){if (tmp < nums[end]){nums[…

阿里云ecs服务器,nginx多域名多项目部署教程,含本地部署教程

nginx多域名部署项目 本地部署线上部署一、本地部署 第一步:win+r 输入drivers 打开hosts文件,编辑 加行 127.0.0.1 自定义域名 … 第二步:下载 nginx 安装好以后 打开ngin安装目录,选择nginx.conf 打开 #user Administrator; worker_processes

封装了一个仿照抖音效果的iOS评论弹窗

需求背景 开发一个类似抖音评论弹窗交互效果的弹窗&#xff0c;支持滑动消失&#xff0c; 滑动查看评论 效果如下图 思路 创建一个视图&#xff0c;该视图上面放置一个tableView, 该视图上添加一个滑动手势&#xff0c;同时设置代理&#xff0c;实现代理方法 (BOOL)gestur…

SLF4J的介绍与使用(有logback和log4j2的具体实现案例)

目录 1.日志门面的介绍 常见的日志门面 &#xff1a; 常见的日志实现&#xff1a; 日志门面和日志实现的关系&#xff1a; 2.SLF4J 的介绍 业务场景&#xff08;问题&#xff09;&#xff1a; SLF4J的作用 SLF4J 的基本介绍 日志框架的绑定&#xff08;重点&#xff09…

鸿蒙开发管理:【@ohos.account.distributedAccount (分布式帐号管理)】

分布式帐号管理 本模块提供管理分布式帐号的一些基础功能&#xff0c;主要包括查询和更新帐号登录状态。 说明&#xff1a; 本模块首批接口从API version 7开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。开发前请熟悉鸿蒙开发指导文档&#xff…

Kaggle网站免费算力使用,深度学习模型训练

声明&#xff1a; 本文主要内容为&#xff1a;kaggle网站数据集上传&#xff0c;训练模型下载、模型部署、提交后台运行等教程。 1、账号注册 此步骤本文略过&#xff0c;如有需要可以参考其他文章。 2、上传资源 不论是上传训练好的模型进行预测&#xff0c;还是训练用的…

PageHelper分页查询遇到的小问题

如果我们是这样子直接查询 pagehelper会拼接导我们的sql语句之后 这样子我们搜索出来的list&#xff0c;就是里面参杂了PageHelper的东西 所以我们可以直接转成我们的Page类型 但是如果我们搜索出来的是List<Blog>&#xff0c;我有些信息不想返回给前端&#xff0c;所以…

仿写Spring IOC

文章目录 IOC思路手写代码思路一些杂七杂八&#xff08;可跳过&#xff09; IOC思路 手写代码思路 手写代码的思路: 自定义一个MyAnnotationConfigApplicationContext&#xff0c;构造器中传入要扫描的包。获取这个包下的所有类。遍历这些类&#xff0c;找出添加了Component注…

【2024_CUMCM】T检验、F检验、卡方检验

T检验 T检验主要用于比较两组数据的均值差异&#xff0c;适用于小样本数据分析。它可以分为单样本T检验、独立样本T检验和配对样本T检验。 单样本T检验用于比较一个样本与已知的总体均值差异&#xff0c;独立样本T检验用于比较两个独立样本的均值差异&#xff0c;配对样本T检…