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

在这里插入图片描述

个人简介: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.hqwc.cn/news/179330.html

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

相关文章

基于JavaWeb+SSM+社区居家养老服务平台—颐养者端微信小程序系统的设计和实现

基于JavaWebSSM社区居家养老服务平台—颐养者端微信小程序系统的设计和实现 源码获取入口前言主要技术系统设计功能截图Lun文目录订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 前言 在复杂社会化网络中,灵活运用社会生活产生的大数据&am…

第四篇 基于JSP 技术的网上购书系统——系统设计(网上商城、仿淘宝、当当、亚马逊)

目录 1.系统总体设计 2.子系统结构与功能 2.2.1.用户后台管理 2.2.2.管理员后台订单管理 2.2.3.图书管理 2.3.4.评论留言 3. 开发环境配置 1.系统总体设计 按照需求分析中提出的功能需求,可以将系统分为多个子系统,同时,根据各个子…

箱线图(boxplot)

箱线图 boxplot 简述原理绘制方法python - matplotlib加载功能模块加载数据绘制boxplot python - seaborn加载功能模块加载数据绘制boxplot R - ggplot加载功能模块加载数据绘制boxplot 简述 因图形形状如箱子而得名。箱线图常用于展示一组连续型数据的分散情况。学术界普遍认…

11_聚类算法

文章目录 1 聚类1.1 什么是聚类1.2 相似度/距离公式1.3 聚类的思想 2 K-means算法2.1 K-means算法步骤2.2 K-means算法思考2.3 K-means算法优缺点 3 解决K-Means算法对初始簇心比较敏感的问题3.1 二分K-Means算法3.2 K-Means算法3.3 K-Means||算法3.4 Canopy算法3.4.1 Canopy算…

巷议:跌落尘埃与风光无限

近几来制造业的退潮是不争的事实,其中以老资格直辖市天津尤为突出。曾记否,想当年韩国的三星集团是天津最强的外企,但是从2015年开始便撤离了,给天津经济带来了重创。 而天津的汽车产业,也日渐变得软弱。其中那曾经小…

电脑检测温度软件有哪些?

环境: Win10 专业版 问题描述: 电脑检测温度软件有哪些? 解决方案: 有很多电脑检测温度的软件可供选择,以下是一些常用的电脑温度监测工具: HWMonitor:一款免费的硬件监控软件&#xff0…

手摸手入门Springboot2.7集成Swagger2.9.2

环境介绍 技术栈 springbootmybatis-plusmysqloracleSwagger 软件 版本 mysql 8 IDEA IntelliJ IDEA 2022.2.1 JDK 1.8 Spring Boot 2.7.13 mybatis-plus 3.5.3.2 REST软件架构风格 REST即表述性状态传递(英文:Representational State T…

Leetcode周赛371补题(3 / 3)

目录 1、找出强数对的最大异或值 - 暴力 2、高访问员工 - 哈希表 模拟 3、最大化数组末位元素的最少操作次数 - 思维 贪心 1、找出强数对的最大异或值 - 暴力 找出强数对的最大异或值 I class Solution {public int maximumStrongPairXor(int[] a) {int na.length,max0;…

电子电机行业万界星空科技MES解决方案

现在电子电机行业规模越来越大,也伴随着生产和管理成本走向变高的现象。针对这个问题,mes系统就成为各电子电机制造业的最优选择。 电子机电行业MES涵盖了从原材料采购到最终产品交付的整个过程,包括生产计划、物料管理、生产过程监控、质量…

修改树莓派4b密码

修改树莓派4b密码,vnc viewer远程连接树莓派时忘记了密码,修改为新密码进行远程连接 sudo passwd pi 其中pi为所要修改密码的用户

Linux系统进程与进程间通信

Linux是一个多用户、多任务的操作系统,支持多个进程同时运行。进程是Linux系统中的基本单元,它们负责执行各种任务,如网页浏览、文件下载、程序运行等。在Linux中,进程是由一个或多个线程组成的,线程是进程的基本执行单…

QT day3作业

1.思维导图 2、 完善对话框,点击登录对话框,如果账号和密码匹配,则弹出信息对话框,给出提示”登录成功“,提供一个Ok按钮,用户点击Ok后,关闭登录界面,跳转到其他界面 如果账号和密…