⑦【MySQL】什么是约束?如何使用约束条件?主键、自增、外键、非空....

news2024/11/26 12:48:45

在这里插入图片描述

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~
个人主页:.29.的博客
学习社区:进去逛一逛~

在这里插入图片描述

约束

  • ⑦【MySQL】约束条件
    • 1. 约束的基本使用
    • 2. 外键约束


⑦【MySQL】约束条件


1. 约束的基本使用

约束

  • 什么是约束?

    • 约束是作用于表中字段上的规则,用于限制存储在表中的数据。
  • 约束的作用:

    • 保证数据库中数据的正确性、有效性和完整性。
  • 约束分类:

    • 非空约束 —— 限制该字段的数据不能为null

      • NOT NULL
        
    • 唯一约束 —— 保证该字段的所有数据都是唯一、不重复的

      • UNIQUE
        
    • 主键约束—— 主键是一行数据的唯一标识,要求非空且唯一

      • PRIMARY KEY
        
    • 默认约束—— 保存数据时,未指定该字段的值,则采用默认值

      • DEFAULT
        
    • 检查约束(8.0.16版本之后)—— 保证字段满足某一条件

      • CHECK
        
    • 外键约束—— 用来让两证表的数据之间建立连接,保证数据的一致性和完整性

      • FOREIGN KEY
        
    • ⑦自增约束

      • AUTO_INCREMENT
        
  • -- 案例
    
    /*
    创建表
    ID唯一标识:id、int、主键且自增
    姓名:name、varchar(10)、不为空且唯一
    年龄:age、int、大于0且小于等于120
    状态:status、char(1)、默认值为1
    性别:gender、char(1)、无约束条件
    */
    CREATE TABLE test(
      id INT COMMENT 'id唯一标识' PRIMARY KEY AUTO_INCREMENT,
      NAME VARCHAR(10) COMMENT '姓名' UNIQUE NOT NULL,
      age INT COMMENT '年龄' CHECK(age BETWEEN 1 AND 120),
      STATUS CHAR(1) COMMENT '状态' DEFAULT 1,
      gender CHAR(1) COMMENT '性别'
    );
    
    -- 查看表结构
    DESC test;
    
    
    -- 向表中插入数据,自增字段可以不指定,会按123...n顺序自动填充
    INSERT INTO test(NAME,age,STATUS,gender) VALUES
    ('小一',18,'1','男');
    
    -- 当设置唯一约束的字段name插入不唯一数据时,会报错:
    -- 错误代码: 1062 Duplicate entry '小一' for key 'test.name'
    INSERT INTO test(NAME,age,STATUS,gender) VALUES
    ('小一',22,'1','女');
    
    -- 当设置非空约束的字段name插入null值,会报错:
    -- 错误代码: 1048 Column 'name' cannot be null
    INSERT INTO test(NAME,age,STATUS,gender) VALUES
    (NULL,22,'1','女');
    
    -- 当设置了检查约束的age字段,插入不符合检查条件的数据,会报错:
    -- 错误代码: 3819 Check constraint 'test_chk_1' is violated.
    INSERT INTO test(NAME,age,STATUS,gender) VALUES
    ('小二',-1,'1','女');
    
    -- 当插入数据时,没有为默认约束字段status设置值,会自动设置默认值1
    INSERT INTO test(NAME,age,gender) VALUES
    ('小三',66,'女');
    



2. 外键约束

如何添加外键约束?

  • 方式一(在创建表时指定外键约束)

  • CREATE TABLE 表名(
    	字段名 数据类型,
        ...
        [CONSTRAINT] [外键名称] FOREIGN KEY(外键字段名) REFERENCES 主表(主表字段名)
    );
    
  • 方式二(在修改表时添加外键约束)

  • ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY(外键字段名) REFERENCES 主表(主表字段名); 
    

外键的删除/更新行为

  • NO ACTION:在父表进行更新/删除时,首先检查记录是否存在外键,存在则不允许删除/更新。(与RESTRICT行为一致)

  • RESTRICT:在父表进行更新/删除时,首先检查记录是否存在外键,存在则不允许删除/更新。(与NO ACTION行为一致)

  • CASCADE:在父表进行更新/删除时,首先检查记录是否存在外键,存在则同时对外键关联的子表进行相应的更新/删除

  • SET NULL:在父表进行更新/删除时,首先检查记录是否存在外键,存在则将外键关联的字段值设置为null(前提是外键关联字段可以为null)

  • SET DEFAULT:在父表进行更新/删除时,首先检查记录是否存在外键,存在则将外键关联的字段值设置为一个默认值(Innodb不支持)

  • 添加外键约束时指定更新行为

  • ALTER TABLE 表名 ADD 
    CONSTRAINT 外键名称 
    FOREIGN KEY(外键字段名) REFERENCES 主表(主表字段名)
    ON UPDATE CASCADE ON DELETE CASCADE;
    -- 将更新行为设定为:CASCADE、将删除行为设定为:CASCADE。
    -- 指定何种更新/删除行为以实际为准,这里提供设定为CASCADE(方式二)的参考。
    -- 除了在修改表时添加外键约束并设定更新/删除行为,还可以在新增表时(方式一)添加并设置。
    




在这里插入图片描述

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

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

相关文章

5.运行时数据区-字符串常量池、程序计数器、直接内存

目录 概述字符串常量池字符串常量池存储数据的方式三种常量池字面量与符号引用 哈希表实战 程序计数器直接内存直接内存与堆内存比较 结束 概述 相关文章在此总结如下: 文章地址jvm基本知识地址jvm类加载系统地址双亲委派模型与打破双亲委派地址运行时数据区地址 …

Spring事务之AOP导致事务失效问题

情况说明 首先开启了AOP,并且同时开启了事务。下面这个TransactionAspect就是一个简单的AOP切面,有一个Around通知。 Aspect Component public class TransactionAspect {Pointcut("execution(* com.qhyu.cloud.datasource.service.TransactionSe…

数据结构-链表的简单操作代码实现2【Java版】

目录 写在前: 此篇讲解关于单链表的一些面试题目,续上节。 11.反转一个单链表 12.给定一个带有头结点的head的非空单链表,返回链表的中间结点,如果有两个中间结点,则返回第二个中间结点 13.输入一个链表&#xff0c…

Nginx 使用笔记大全(唯一入口)

Linux服务器因为Nginx日志access.log文件过大项目无法访问 项目处于运行状态下无法访问,第一步查看磁盘状态 1、查看磁盘状态 df -h 2、查找100M以上的文件 find / -size 100M |xargs ls -lh 3、删除文件 rm -rf /usr/local/nginx/logs/access.log 4、配置nginx.…

Linux 性能调优之硬件资源监控

写在前面 考试整理相关笔记博文内容涉及 Linux 硬件资源监控常见的命名介绍,涉及硬件基本信息查看查看硬件错误信息查看虚拟环境和云环境资源理解不足小伙伴帮忙指正 对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生&#x…

centos7下载python3离线安装包

下载离线安装工具 yum install yum-utils -y下载python3离线安装包 yumdownloader --destdir/root/python3 --resolve python3将python3下面的离线安装文件拷贝到其他服务器上就可以安装 离线安装 先进入到离线程序rpm文件存储路径 # 离线安装 rpm -Uvh --force --nodep…

Cnyunwei

运维管理系统:监控系统 Cnyunwei Centos 6 封装 Cacti、Nagios、Centreon(中英文自己切换)、Check_MK、Nconf英文版本全部采用与国外官方同步的最新版本,会发布32位和64位两个版本。 安装很简单,直接回车即可全自动安…

AttributeError: module ‘matplotlib‘ has no attribute ‘get_data_path‘

【报错】使用 AutoDL 下 Notebook 调用 matplotlib 时遇到 AttributeError: module matplotlib has no attribute get_data_path 报错: --------------------------------------------------------------------------- AttributeError …

《深入浅出进阶篇》——空间换时间优化——P2671 求和

链接:https://www.luogu.com.cn/problem/P2671 上题干: 题目描述 一条狭长的纸带被均匀划分出了n个格子,格子编号从11到n。每个格子上都染了一种颜色colori​用[1,m]当中的一个整数表示),并且写了一个数字numberi​。…

asp.net core mvc之 布局

一、布局是什么? 布局是把每个页面的公共部分,提取成一个布局页面(头、导航、页脚)。 二、默认布局 _Layout.cshtml 默认的布局是在 /Views/Shared 目录的 _Layout.cshtml文件。通常Shared目录中的视图都是公共视图。该目录下的…

部分背包问题【贪心算法】

部分背包问题是一种经典的贪心问题,物品可以取一部分,也就是可以随意拆分的物品。 算法思路: 用列表保存每个物品的价值及总重量、平均价值(性价比)。输入数据同时计算每种物品的平均价值。使用自定义的compare函数以…

PADS快速调整器件的位号

选择元器件, ctrlA 全选器件,右击菜单选择特性 如下三个信息,确认 配置标签信息,如图界面信息,点击应用,器件全部归位

Slax Linux 强化了会话管理和引导参数选项

导读Slax Linux 的创始人和维护者Tomas Matejicek 宣布 了他的微型和便携 GNU/Linux 发行版的新版本,带来了各种增强和错误修复。 新的 Slax Linux 版本(基于 Debian 的 12.1 版本和基于 Slackware 的 15.0.2 版本)引入了在可写设备上运行发…

vue3 ref 与shallowRef reactive与shallowReactive

ref 给数据添加响应式,基本类型采用object.defineProperty进行数据劫持,对象类型是借助reactive 实现响应式,采用proxy 实现数据劫持,利用reflect进行源数据的操作 let country ref({count:20,names:[河南,山东,陕西],objs:{key…

AI大模型时代,开发工程师与项目管理者面对的机遇和挑战,文末送书3本

🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年6月CSDN上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师…

centos7 在线安装python3

在线安装命令 yum install -y python3 输入命令之后等待安装完成 查看版本 查看版本3 输入命令 python3 看到版本号为3.6.8 查看版本2 输入命令 python2 看到版本号为2.7.5

网络运维Day13

文章目录 部署web服务器部署虚拟机web1安装依赖包解压NGINX压缩包初始化编译编译安装查看验证配置动静分离 部署虚拟机web2安装依赖包解压NGINX压缩包初始化编译编译安装查看验证配置动静分离 配置NGINX七层代理测试健康检查功能 配置NGINX四层代理部署代理服务器 总结 部署web…

vue中cli组件如何自定义定义

目录 创建自定义组件 注册并使用自定义组件 注册组件: 在需要使用该组件的页面或父组件中注册并引入自定义组件。 使用 Props 传递数据 总结步骤: 前言 在Vue CLI中使用自定义组件是构建交互式和模块化Web应用的重要一环。Vue CLI为开发者提供了使用…

RocketMQ底层通信机制

分布式系统各个角色间的通信效率很关键,通信效率的高低直接影响系统性能,基于Socket实现一个高效的TCP通信协议是很有挑战的,本节介绍RocketMQ是如何解决这个问题的。 1.Remoting模块 RocketMQ的通信相关代码在Remoting模块里,先…

Linkage Mapper 报错

1 . 错误提示:“No module named lm_config” 错误原因:**** 2.错误提示:“Cannot find an installation of Circuitscape in your Program Files directory.” 错误原因:***** 3. 错误提示:UnicodeEncodeError: ‘asc…