MySQL数据库——约束(概述、约束演示、外键约束、删除/更新行为)

news2024/11/16 11:42:53

目录

概述

约束演示

表格创建

验证

图形化界面约束

外键约束

概念

语法

外键删除/更新行为

总结


概述

  1. 概念:约束是作用于表中字段上的规则,用于限制存储在表中数据。
  2. 目的:保证数据库中数据的正确、有效性和完整性。
  3. 分类:
约束描述关键字
非空约束限制该字段的数据不能为NULLNOT NULL
唯一约束保证该字段的所有数据都是唯一、不重复的UNIQUE
主键约束主键是一行数据的为唯一标识,要求非空且唯一PRIMARY KEY
默认约束保存数据时,如果未指定该字段的值,则采用默认值DEFAULT
检查约束(8.0.16版本之后)保存字段值满足某一个条件CHECK
外键约束用来让两张表的数据之间建立连接,保证数据的一致性和完整性FOREIGN KEY

约束演示

表格创建

根据需求,完成表格的创建:

字段名字段含义字段类型约束条件约束关键字
idID唯一标识int主键,并且自动增长PRIMARY KEY,AUTO_INCREMENT
name姓名varchar(10)不为空,并且唯一NOT NULL,UNIQUE
age年龄int大于0,并且小于等于120CHECK
status状态char(1)如果没有指定该值,默认为1DEFAULT
gender性别char(1)

自动增长:随着表格的行数自行增加id,关键字为auto_increment

create table user(
    id int primary key auto_increment comment '主键',
    name varchar(10) not null unique comment '姓名',
    age int check(age > 0 and age <= 120) comment '年龄',
    status char(1) default '1' comment '状态',
    gender char(1) comment '性别'
) comment '用户表';

验证

1.主键及自动增长

我们插入数据时,不输入ID

create table user(
    id int primary key auto_increment comment '主键',
    name varchar(10) not null unique comment '姓名',
    age int check(age > 0 and age <= 120) comment '年龄',
    status char(1) default '1' comment '状态',
    gender char(1) comment '性别'
) comment '用户表';

此时发现,id作为主键,并且拥有自动增长的约束,会随着行数在增加而自动增加,不需要我们进行输入

2.姓名不为空,并且唯一

当我们姓名输入为空时,就会报错;而姓名重复时,为该条插入值申请了主键之后,并不会真的将其插入,所以会出现id值跳跃了1.(例如:1,2,3,5)

3.年龄必须要大于0,小于等于120

4.状态没有指定时,默认为1

insert into user (name,age,gender)
            values ('Jack6',18,'男');

图形化界面约束

外键约束

概念

外键用来让两张表的数据之间建立连接,从而保证数据的一致性和完整性。

注意:目前上述的两张表,在数据库层面,并未建立外键关联,所以是无法保证数据的一致性和完整性的。 

也就是说,删除了部门表中的研发部,员工表中所属研发部的员工并不会被删除,从而出现数据的完整性问题。

语法

添加外键

CREATE TABLE 表名(
    字段名 数据类型,
    ...
    [CONSTRAINT] [外键名称] FOREIGN KEY (外键字段名) REFERENCES 主表 (主列表名)
);

-- 或
ALTER TABLE 表名 
    ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名) REFERENCE 主表 (主列表名);

删除外键

ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;

示例

alter table emp 
    add constraint fk_emp_dept_id foreign key (dept_id) references dept(id);

alter table emp drop foreign key fk_emp_dept_id;

 

外键删除/更新行为

行为说明
NO ACTION当在父表中删除/更新对应记录时,首先检查记录是否有对应外键,如果有则不允许删除/更新。(与RESTRICT一致)
RESTRICT当在父表中删除/更新对应记录时,首先检查记录是否有对应外键,如果有则不允许删除/更新。(与NO ACTION一致)
CASCADE当在父表中删除/更新对应记录时,首先检查记录是否有对应外键,如果有,则也删除/更新外键在子表中的记录。
SET NULL当在父表中删除对应记录时,首先检查记录是否有对应外键,如果有则设置子表中该外键值为null(要求该外键允许取null)
SET DEFAULT父表有变更时,子表将外键列设置成一个默认的值(Innodb不支持)
ALTER TABLE 表名 
    ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名) REFERENCE 主表 (主列表名)
        ON UPDATE CASCADE ON DELETE CASCADE;

演示

alter table emp
    add constraint fk_emp_dept_id foreign key (dept_id) references dept(id)
        on update cascade  on delete  cascade ;

 这时候把主表研发部的id改为6:

 子表也进行了更新: 

 

总结

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

end


学习自:黑马程序员——MySQL数据库课程

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

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

相关文章

有哪些常人不知道的赚钱方法?

在目前互联网时期&#xff0c;如果说还有什么挣钱方法让别人不知道&#xff0c;那一定是赚大钱或者违法乱纪的挣钱渠道。但是对于普通人而言&#xff0c;确实是有一些挣钱的方法不被其了解&#xff0c;我这里就介绍几个&#xff0c;供大家一起探讨。 第一个&#xff1a;知识变…

TCP/IP五层模型、封装和分用

1.网络通信基础2.协议分层OSI七层协议模型TCP/IP五层/四层协议模型【重点】 3. 封装&分用 1.网络通信基础 IP地址&#xff1a;表示计算机的位置&#xff0c;分源IP和目标IP&#xff1b;举个例子&#xff1a;买快递&#xff0c;商家从上海发货&#xff0c;上海就是源IP&…

爱奇艺数据湖实战 - 基于数据湖的日志平台架构演进

01 背景 为了满足公司内日志实时查询分析的需求&#xff0c;爱奇艺大数据团队自研了Venus日志服务平台&#xff0c;负责爱奇艺各服务日志的采集、存储、处理、分析等场景。早期采用基于ElasticSearch的存储分析架构&#xff0c;随着数据规模的不断扩大&#xff0c;出现了成本高…

C语言基础之——指针(上)

前言&#xff1a;小伙伴们又见面啦&#xff01;本期内容&#xff0c;博主将展开讲解有关C语言中指针的上半部分基础知识&#xff0c;一起学习起来叭&#xff01;&#xff01;&#xff01; 目录 一.什么是指针 二.指针类型 1.指针的解引用 2.指针-整数 三.野指针 1.野指针…

Day46|动态规划part08:139.单词拆分、多重背包理论基础、背包问题总结

139. 单词拆分 leetcode链接&#xff1a;力扣题目链接 视频链接&#xff1a;你的背包如何装满&#xff1f;| LeetCode&#xff1a;139.单词拆分 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。注意&#xff1a;不要…

【Linux】目录结构、路径

目录 1. 目录结构 1.1 基本概念 1.2 具体的目录结构 2. 路径 2.1 绝对路径和相对路径 2.2 特殊路径符 1. 目录结构 1.1 基本概念 Linux的目录结构是一个树形结构。 Windows系统可以拥有多个盘符&#xff0c;如 C盘、D盘、E盘。Linux没有盘符这个概念&#xff0c;只有一…

树莓派自带的GPIO串口输出及输出乱码问题解决方案

可以使用树莓派的UART0进行串口输出&#xff0c;具体连接方法如图所示&#xff1a; 连接后可以使用如下代码发送串口数据&#xff1a; import serial import time# 串口初始化 ser serial.Serial(/dev/serial0, 9600, timeout1) # /dev/serial0 是树莓派上默认的串口设备# 发…

图书馆项目Java阅览室管理系统jsp源代码MySQL

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 图书馆项目 系统有1权限&#xff1a;管理员 用所技术…

Scikit-Learn中的特征选择和特征提取详解

概要 机器学习在现代技术中扮演着越来越重要的角色。不论是在商业界还是科学领域&#xff0c;机器学习都被广泛地应用。在机器学习的过程中&#xff0c;我们需要从原始数据中提取出有用的特征&#xff0c;以便训练出好的模型。但是&#xff0c;如何选择最佳的特征是一个关键问…

eslint和prettier格式化冲突

下载插件 ESLint 和 Prettier ESLint 进入setting.json中 setting.json中配置 {"editor.tabSize": 2,"editor.linkedEditing": true,"security.workspace.trust.untrustedFiles": "open","git.autofetch": true,"…

ARM开发,stm32mp157a-A7核(UART总线实验)

1.目标&#xff1a;键盘输入一个字符a,串口工具显示b&#xff1b; 键盘输入一个字符串"nihao",串口工具显示"nihao"&#xff1b; 2.框图分析&#xff1a; 3.代码&#xff1a; ---.h头文件--- #ifndef __UART4_H__ #define __UART4_H__#include "st…

1.Prometheus

文章目录 Prometheus概述存储特点生态组件Prometheus serverClient LibraryExportersService DiscoveryAlertmanagerPushgatewayGrafana 工作模式工作流程局限性 部署prometheus部署 Node Exporter部署mysqld_exporter部署nginx-exporter部署grafana 总结 Prometheus 概述 za…

Yolo系列-yolov1

YOLO-V1 经典的one-stage方法 YouOnlyLookOnce&#xff0c;名字就已经说明了一切&#xff01;把检测问题转化成回归问题&#xff0c;一个CNN就搞定了&#xff01;可以对视频进行实时检测&#xff0c;应用领域非常广&#xff01; 核心思想&#xff1a; Yolov1的核心思想是将对象…

Adapter Tuning Overview:在CV,NLP,多模态领域的代表性工作

文章目录 Delta TuningAdapter Tuning in CVAdapter Tuning in NLP Delta Tuning Adapter Tuning in CV 题目: Learning multiple visual domains with residual adapters 机构&#xff1a;牛津VGG组 论文: https://arxiv.org/pdf/1705.08045.pdf Adapter Tuning in NLP …

input输入框和按钮相关联

有了内容&#xff0c;提交按钮才会起作用&#xff01;&#xff01;&#xff01; 当input输入框中输入内容的时候&#xff0c;按钮从禁用状态变成可用状态&#xff01; 输入框中输入的内容会同步输出&#xff0c; 输入的内容被存放在e.detail.value中&#xff0c;将其提取出来赋…

MybatisPlus拦截器实战之数据的加解密和脱敏

文章目录 一、前言二、拦截器简介三、代码目录结构简介四、核心代码讲解4.1 application.yml文件4.2 自定义注解4.2.1 SensitiveEntity4.2.2 SensitiveData4.2.3 MaskedEntity4.2.4 MaskedField4.2.5 MaskedMethod 4.3 Mybatis-Plus 拦截器数据自动加密4.4 Mybatis 打印完整sql…

浅析Linux SCSI子系统:设备管理

文章目录 概述设备管理数据结构scsi_host_template&#xff1a;SCSI主机适配器模板scsi_host&#xff1a;SCSI主机适配器主机适配器支持DIF scsi_target&#xff1a;SCSI目标节点scsi_device&#xff1a;SCSI设备 添加主机适配器构建sysfs目录 添加SCSI设备挂载Lun 相关参考 概…

FTHR-G0001 新手小白的第一块keil开发板

前言 作为从未接触过这类板子的新手&#xff0c;从申请起就十分忐忑&#xff0c;拿到板子的第一印象就是小而又特别&#xff0c;既可以整块板使用&#xff0c;也可以掰开用杜邦线连接的形式具备了灵活与小巧的特点&#xff0c;而核心板的把排针围成一圈的设计就足以让它在树莓…

HRS--人力资源系统(Springboot+vue)--打基础升级--(五)编辑当条记录

今天开发第一步&#xff1a;当前条记录&#xff0c;点击编辑&#xff0c;可以修改数据 1. 首先点击编辑&#xff0c;获取到了当前条的数据&#xff0c;弹出了一个小窗口 这个窗口是不是很熟悉&#xff0c;&#xff0c;没错。。这个窗口跟新增按钮弹出的窗口是同一个的 bug1&am…

使用 Next.js、Langchain 和 OpenAI 构建 AI 聊天机器人

在当今时代&#xff0c;将 AI 体验集成到您的 Web 应用程序中变得越来越重要。LangChain 与 Next.js 的强大功能相结合&#xff0c;提供了一种无缝的方式来将 AI 驱动的功能引入您的应用程序。 在本指南中&#xff0c;我们将学习如何使用Next.js&#xff0c;LangChain&#xf…