MySQL--数据库约束(详解)

news2024/11/18 23:02:58

目录

  • 一、前言
  • 二、概念
  • 三、数据库约束
    • 3.1 约束类型
      • 3.1.1 NOT NULL 约束
      • 3.1.2 UNIQUE (唯一)
      • 3.1.3 DEFAULT(默认)
      • 3.1.4 PRIMARY KEY(主键)
      • 3.1.5 FOREIGN KEY(外键)
      • 3.1.6 CHECK
  • 四、总结

一、前言

                      欢迎大家来到权权的博客~
        欢迎大家对我的博客进行指导,有什么不对的地方,我会及时改进哦~      

博客主页链接点这里–>:权权的博客主页链接

二、概念

对表中的数据进行限定,保证数据的正确性,有效性,完整性,是关系型数据库的一个重要功能。

三、数据库约束

3.1 约束类型

1.主键约束(primary key):保证该字段具有非空且唯一性,一张表中只能有一个主键,主键是表中字段的唯一标识。
2.非空约束(not null):保证字段不能为空。
3.唯一约束(unique):保证该字段具有唯一性但是可以为null。
4.外键约束(foreign key):在一个表中存在的另一个表的主键或唯一键称此表的外键。
5.默认约束(default+默认值):用于保证该字段有默认值(用引号引起来)。
6.检查约束(check)用来检查数据表中,字段值是否有效。比如年龄、性别。

3.1.1 NOT NULL 约束

指定某一列不能存储NULL值。
创建表时,在相应的字段加入约束类型

>create  table if not exists student
   >(
   >name varchar(255) null,
   >id bigint(20) null,
   >age int(11) not null
   >);

查表结构如下:
在这里插入图片描述
在这里插入图片描述

3.1.2 UNIQUE (唯一)

保证某列的每行必须有唯一的值
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.1.3 DEFAULT(默认)

规定没有给列赋值时的默认值

给school表添加name字段并且设置默认约束
在这里插入图片描述
在这里插入图片描述

3.1.4 PRIMARY KEY(主键)

not null 和 unique 的结合,确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更加快速地找到表中的一个特定的记录。
是一种用于唯一标识表中每一行数据的标识符。在Mysql中,主键可以是一个或多个列的组合,但是必须满足以下条件
主键列的值必须唯一,不能重复。
主键列的值不能为空,不能为NULL。
一个表只能有一个主键。

主键约束的列即是非空也是唯一的
把表中ID设置成为唯一且非空。
在这里插入图片描述

注意:
1.一个表中不能有两个主键:
在这里插入图片描述
2.一个主键可以包含多个列(复合主键)
在这里插入图片描述
在这里插入图片描述

3.1.5 FOREIGN KEY(外键)

外键是一种用于建立表与表之间关联关系的机制。外键可以用于保证数据的完整性和一致性。

语法:

foreign key(列名) references 主表名(主列名); 

表中的某个列值必须是别一张表中的主键列,或是唯一约束列的值,也就是当前表中的值在另一张表中必须存在,且满足主键或者唯一约束。
创建animals表跟dog表并且设置主键约束跟外键约束;
在这里插入图片描述

3.1.6 CHECK

用来检查数据表中,字段值是否有效,比如年龄、性别。CHECK约束是数据库表中的一种规则,用于限制列可以接受的值。当对表进行数据插入或更新操作时,数据库会检查这些值是否满足CHECK约束中定义的条件。如果不满足,操作将会失败,并且数据库会返回一个错误。

如何创建带有CHECK约束的表?
在创建表时,你可以在列定义后直接添加CHECK约束。以下是一个例子:

CREATE TABLE employees (
    id INT AUTO_INCREMENT PRIMARY KEY,
    first_name VARCHAR(50) NOT NULL,
    last_name VARCHAR(50) NOT NULL,
    salary DECIMAL(10, 2),
    department ENUM('HR', 'Tech', 'Sales', 'Marketing') NOT NULL,
    -- 在这里添加CHECK约束,确保工资不能低于0
    CONSTRAINT chk_salary CHECK (salary >= 0)
);

在这个例子中,chk_salaryCHECK约束的名称,它确保了salary列的值不能小于0。
注意事项:

  • 在MySQL 5.7之前,虽然可以定义CHECK约束,但它们实际上不会强制执行。
  • 从MySQL 8.0开始,CHECK约束默认是启用的,并且会被强制执行。
  • 在MySQL 5.7中,如果想要CHECK约束被强制执行,必须确保服务器运行在严格模式。
  • CHECK约束可以引用同一表中的多个列。
  • CHECK约束不能引用其他表中的列。
  • 当插入或更新数据时,如果违反了CHECK约束,操作将会失败,并返回错误。

四、总结

在这里插入图片描述

在这里插入图片描述
欧耶!!!我学会啦!!!

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

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

相关文章

Redis篇(最佳实践)(持续更新迭代)

介绍一:键值设计 一、优雅的key结构 Redis 的 Key 虽然可以自定义,但最好遵循下面的几个最佳实践约定: 遵循基本格式:[业务名称]:[数据名]:[id]长度不超过 44 字节不包含特殊字符 例如: 我们的登录业务&#xff0…

十四、磁盘的管理

1.磁盘初始化 Step1:进行低级格式化(物理格式化),将磁盘的各个磁道划分为扇区。一个扇区通常可分为头、数据区域(如512B大小)、尾 三个部分组成。管理扇区所需要的各种数据结构一般存放在头、尾两个部分,包括扇区校验码(如奇偶校验、CRC循环几余校验码等…

Azkaban:大数据任务调度与编排工具的安装与使用

在当今大数据时代,数据处理和分析任务变得越来越复杂。一个完整的大数据分析系统通常由大量任务单元组成,如 shell 脚本程序、mapreduce 程序、hive 脚本、spark 程序等。这些任务单元之间存在时间先后及前后依赖关系,为了高效地组织和执行这…

【架构】prometheus+grafana系统监控

文章目录 一、Prometheus简介二、Grafana简介三、PrometheusGrafana系统监控的实现四、优势与应用场景 参考 PrometheusGrafana系统监控是一个强大的组合,用于实时监控和分析系统的性能与状态。以下是对这一组合在系统监控中的详细解析: 一、Prometheus…

postgresql僵尸进程的处理思路

简介 僵尸进程(zombie process)是指一个已经终止但仍然在进程表中保留条目的进程。正常情况下,当一个进程完成执行并退出时,操作系统会通过父进程调用的wait()或waitpid()系统调用来收集该子进程的退出状态。如果父进程未及时调用…

快速了解:MySQL InnoDB和MyISAM的区别

目录 一、序言二、InnoDB和MyISAM对比1、InnoDB特性支持如下2、MyISAM特性支持如下 三、两者核心区别1、事务支持2、锁机制3、索引结构4、缓存机制5、故障恢复6、使用场景 一、序言 在MySQL 8.0中,InnoDB是默认的存储引擎。除了InnoDB,MySQL还支持其它的…

SQL - 函数

1. 操作类函数 这一类函数针对数据结构,表格进行筛选操作 1.1 GROUP BY 根据某个单一列中属性或者多个列对结果集进行分组 SELECT column1, SUM(column2) FROM table GROUP BY column1; 上述代码将所选择列进行column1中的属性分组,作为每一行的索引…

如何在idea使用RabbitMQ

一.RabbitMQ的安装和访问 1.在linux虚拟机安装RabbitMQ docker run -d --name rabbitmq -p 5671:5671 -p 5672:5672 -p 4369:4369 -p 25672:25672 -p 15671:15671 -p 15672:15672 rabbitmq:3.9.9-management 2.启动RabbitMQ docker start rabbitmq 3.访问 RabbitMQ网页 在自…

【Python】Uvicorn:Python 异步 ASGI 服务器详解

Uvicorn 是一个为 Python 设计的 ASGI(异步服务器网关接口)Web 服务器。它填补了 Python 在异步框架中缺乏一个最小化低层次服务器/应用接口的空白。Uvicorn 支持 HTTP/1.1 和 WebSockets,是构建现代异步Web应用的强大工具。 ⭕️宇宙起点 &a…

C++网络编程之IP地址和端口

概述 IP地址和端口共同定义了网络通信中的源和目标。IP地址负责将数据从源设备正确地传输到目标设备,而端口则确保在目标设备上数据被交付到正确的应用或服务。因此,在网络编程中,IP地址和端口是密不可分的两个概念,共同构成了网络…

Why RTSP?RTSP播放器优势探究

RTSP优势探究 好多开发者搞不清楚,低延迟的传输,到底是走RTMP、WebRTC还是RTSP?如果走RTSP,RTSP播放器的优势有哪些?能否达到期望的延迟?答案是肯定的,废话不多说,上效果图&#xf…

Power apps:一次提交多项申请

1、添加一个Form,导入sharepoint列表,添加确认,继续,取消按钮 2、在页面的onvisible属性中添加 Set(applynumber,Last(付款申请表).申请编号1); #定义一个申请编号变量,每次申请,就将列表最后一个…

医疗陪诊APP开发实战:从互联网医院系统源码开始

本文将从互联网医院系统源码出发,深入探讨医疗陪诊APP的开发实战。 一、从互联网医院系统源码入手 开发医疗陪诊APP的基础在于互联网医院系统的源码。互联网医院系统通常包括以下几个模块: 1.用户管理:用户注册、登录、信息管理等功能。 …

C++继承的三种方式[ACCESS]

C继承的定义 两个类的继承关系在派生类中声明,派生类定义使用以下语法: class DerivedClass: [ACCESS] BaseClass{ /…/ }; 冒号(:)后的[ACCESS]是继承的最高权限级别符,可以是以下三个值(存取权限级别&am…

fpga系列 硬件(时序收敛):触发器建立时间(setuptime)

触发器 电平触发、边沿触发和脉冲触发是三种主要的触发形式。always (posedge clk or negedge rst_n) 是一个典型的 Verilog 语句,用于定义一个带复位的触发器。D触发器是一种基本的数字存储元件,主要用于数据存储和时序控制。 D触发器的建立时间和保持…

Zabbix自动发现SNMP主机

前言 利用Zabbix监控DELL R740主机硬件,监控通过自动发现主机,链接SNMP监控模板 一、配置自动发现 自动发现脚本 cat discovery_host.pyfrom os.path import abspath, dirname, join import json import sysreload(sys) sys.setdefaultencoding(utf-8…

【2024】前端学习笔记11-网页布局-弹性布局flex

学习笔记 网页布局弹性布局:flex案例:flex布局案例 网页布局 在页面布局中,display属性用于设置一个元素的显示方式。它可以指定元素是作为块级元素、内联元素还是充当表格元素显示。 display的常见属性值: block:将…

前端——Ajax和jQuery

一、Ajax Ajax即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML), 通过 JS 异步的向服务器发送请 求并接收响应数据。 同步访问:当客户端向服务器发送请求时,服务器在处理的过程中,浏览器…

AutoGen实现多代理-Planning_and_Stock_Report_Generation(六)

1. 案例背景 本节内容是构建Agent组,通过广播模式,实现管理者对agent工作流的管理。本实验链接:传送门 2. 代码实践 2.1 环境设置 llm_config{"model": "gpt-4-turbo"}# 工作任务描述 task "Write a blogpost a…