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

news/2024/10/2 8:05:37 标签: 数据库, mysql, 开发语言, 学习

目录

  • 一、前言
  • 二、概念
  • 三、数据库约束
    • 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.niftyadmin.cn/n/5688180.html

相关文章

Maven 实现依赖统一管理

Maven 实现依赖统一管理主要是通过两个关键机制&#xff1a;pom.xml 文件中的 <dependencies> 节点用于声明项目依赖&#xff0c;以及通过继承&#xff08;Inheritance&#xff09;和聚合&#xff08;Aggregation&#xff09;功能来统一管理和组织这些依赖。此外&#xf…

【鸿蒙学习】深入了解UIAbility组件

文章目录 组件概述生命周期启动模式基本用法 在鸿蒙操作系统&#xff08;HarmonyOS&#xff09;的开发过程中&#xff0c;UIAbility组件是构建应用界面的关键。本文将带您了解UIAbility组件的概述、生命周期、启动模式以及基本用法&#xff0c;并通过代码示例帮助您更好地掌握这…

Vue中使用Hls.js进行视频直播的播放

HLS.js使用文档 1、安装组件&#xff1a; npm install hls.js --save2、引入组件&#xff1a; import Hls from hls.js3、使用组件&#xff1a; // DOM&#xff1a; <video id"video" controls loop"false"></video> // DATA: let hls nul…

SparkSQL-性能调优

祝福 在这个举国同庆的时刻&#xff0c;我们首先献上对祖国的祝福&#xff1a; 第一&#xff0c;我们感谢您给我们和平的环境&#xff0c;让我们能快乐生活 第二&#xff0c;祝福我们国家未来的路越走越宽广&#xff0c;科技更发达&#xff0c;人民更幸福 第三&#xff0c;…

【论文阅读】基于真实数据感知的模型功能窃取攻击

摘要 目的 模型功能窃取攻击是人工智能安全领域的核心问题之一&#xff0c;目的是利用有限的与目标模型有关的信息训练出性能接近的克隆模型&#xff0c;从而实现模型的功能窃取。针对此类问题&#xff0c;一类经典的工作是基于生成模型的方法&#xff0c;这类方法利用生成器…

Java面向对象第四章方法重写与多态练习题

练习1&#xff1a;使用重写优化电子宠物系统 需求说明 使用方法重写优化电子宠物系统&#xff0c;实现如下效果 package com.hz.ch02; /*** 猫类* author 26255**/ public class Cat extends Father {private String sex;public Cat(String name, int health, int love, Stri…

Python面向对象基础:属性动态添加

目录 前言 一、面向对象编程概述 1.1 什么是面向对象编程? 1.2 Python中的OOP 二、类和对象的基本定义 2.1 定义类 2.2 创建对象 三、动态添加属性 3.1 如何动态添加属性 3.2 示例:动态添加属性 3.3 动态添加方法 四、动态添加属性的应用场景 4.1 配置对象 4.2 …

Android 13.0 系统wifi列表显示已连接但无法访问网络问题解决

1.前言 在13.0的系统rom产品定制化开发中,在wifi模块也很重要,但是在某些情况下对于一些wifi连接成功后,确显示已连接成功,但是无法访问互联网 的情况,所以实际上这时可以正常上网的,就是显示的不正常,所以就需要分析连接流程然后解决问题 如图所示: 2.系统wifi列表显示…