MySQL -- 表的约束

MySQL – 表的约束

文章目录

  • MySQL -- 表的约束
  • 一、表的约束
    • 1.空属性
    • 2.默认值
    • 3.列描述
    • 4.zerofill
    • 5.主键
    • 6.自增长
    • 7.唯一键
    • 8.外键


一、表的约束

真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合
法性,从业务逻辑角度保证数据的正确性。

1.空属性

在字段类型后加null或not null修饰;
两个值:null (默认的)和not null(不为空);
数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空,因为数据为空没办法参与运算。
在这里插入图片描述

  • 当设置某列的空属性为not null时,该列在插入数据时,必须插入有效数据,没有数据就会报错;
  • 可以插入空串;

2.默认值

在字段类型后加default修饰;
某一种数据会经常性的出现某个具体的值,可以在一开始就指定好, 在需要真实数据的时候,用户可以选择性的使用默认值;
在这里插入图片描述
设置列属性默认值后,插入数据该字段不赋值,就是用默认值:
在这里插入图片描述

  • not null与default:
    在这里插入图片描述
    如果一个字段同时设置了not null 和 default:意为不能将该字段的值显式设置为NULL,可以不赋值或者赋正常值;

3.列描述

在字段类型后加comment修饰;
列描述:comment,没有实际含义,专门用来描述字段,会根据表创建语句保存,用来给程序员或DBA来进行了解。
在这里插入图片描述
通过desc无法查看注释信息,可以通过create table查看:
在这里插入图片描述

4.zerofill

在字段类型后加zerofill修饰;
数字类型后面的长度就是zerofill属性,相当于一个字段的默认宽度,表示如果插入数据的宽度小于默认宽度,就会自动填充0;
在这里插入图片描述
上图表中的三个字段:num1为默认int类型,num2的为设置了zerofill属性的int(5)类型,num3为设置了zerofill的默认int类型,向其中插入相同的数据:
在这里插入图片描述
可以看出num1不受zerofill的影响,num2和num3都进行了自动填充;

  • int类型默认zerofill的长度是10,这是为了默认能将整数的最大值显示出来(2^31 - 1);

5.主键

在字段类型后加primary key修饰;
主键:primary key用来唯一的约束该字段里面的数据, 不能重复,不能为空,一张表中最多只能有一个主键;主键所在的列通常是整数类型;

  • 创建表的时候直接在字段上指定主键:
    在这里插入图片描述
    设置id为主键;
    在这里插入图片描述
  • 主键字段不能重复,不能为空:
    在这里插入图片描述
  • 当表创建好但是没有主键时,可以后面追加主键:
alter table 表名 add primary key(字段列表);
  • 删除主键:
alter table 表名 drop primary key;
  • 复合主键:
    在创建表的时候,在所有字段之后,使用primary key(主键字段列表)来创建主键,如果有多个字段作为主键,可以使用复合主键;
    在这里插入图片描述
    复合主键的指定在所有字段说明之后,复合主键的单个字段允许重复,但是如果所有字段都重复,就无法插入数据;
    在这里插入图片描述

6.自增长

在字段类型后加auto_ increment修饰;
auto_ increment当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值+1操作,得到一个新的不同的值。通常和主键搭配使用,作为逻辑主键。
自增长的特点:

  • 任何一个字段要做自增长,前提是本身是一个索引(key一栏有值)
  • 自增长字段必须是整数
  • 一张表最多只能有一个自增长

索引:

  • 在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。
  • 索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。
  • 索引提供指向存储在表的指定列中的数据值的指针,然后根据您指定的排序顺序对这些指针排序。
  • 数据库使用索引以找到特定值,然后顺指针找到包含该值的行。这样可以使对应于表的SQL语句执行得更快,可快速访问数据库表中的特定信息。

设置id为自增长的主键:
在这里插入图片描述
如果显式向自增长字段中添加数据,自增长值就会更新为该字段最大的值+1;
在这里插入图片描述
也可以在建表时指定自增长的初始值:
在这里插入图片描述

7.唯一键

在字段类型后加unique修饰;
一张表中有往往有很多字段需要唯一性,数据不能重复,但是一张表中只能有一个主键,唯一键就可以解决表中有多个字段需要唯一性约束的问题。
唯一键的本质和主键差不多,唯一键允许为空, 而且可以多个为空,空字段不做唯一性比较。
关于唯一键和主键的区别:

  • 主键更多的是标识唯一性的;而唯一键更多的是保证在业务上,不要和别的信息出现重复;
  • 我们数据库中的学生表,本质其实是用来描述一堆学生信息, 以一个学生为例:
    表中存的都是我们身上的属性值,有的是可以重复的,有的是不会重复的;
  • 唯一键和主键并不冲突,反而是互相补充的,共同维护表的完整性;
  • 主键:更多的是为了保证我们在查找的时候,找到唯一的一条记录;
    唯一键:更多的是为了保证在表中,某个字段的值不能重复,一定要在mysq|层面也保证他的唯一性;

将序号设置为主键,学号和邮箱地址设置为唯一键:
在这里插入图片描述
插入数据:
在这里插入图片描述
在这里插入图片描述

8.外键

外键用于定义主表和从表之间的关系:外键约束主要定义在从表上,主表则必须是有主键约束或unique约束;当定义外键后,要求外键列数据必须在主表的主键列存在或为null;
语法:

foreign key (字段名) references 主表()

主表字段和从表字段之间存在约束关系:
在这里插入图片描述

  • 定义一个主表:
    在这里插入图片描述
    在这里插入图片描述

  • 定义一个从表,其中从表的class_id定义为主表中id的外键:
    在这里插入图片描述
    在这里插入图片描述

  • 向表中插入数据:
    在这里插入图片描述
    在这里插入图片描述
    如上图所示,stu_tb中的class_id是class_tb表中id的外键,因此在向stu_tb插入数据时,class_id的值只能是class_tb表中id已经存在的值,这就是外键的约束关系;

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

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

相关文章

Python 编写确定个位、十位以上方法及各数位的和程序

Python 编写确定数字位方法 Python 编写确定个位、十位Python 编写确定个位、十位、百位方法解析:Python 各数位的和程序 利用%(取余符号)、//(整除)符号。 Python 编写确定个位、十位 num 17 a num % 10 b num /…

pytorch 入门 (五)案例三:乳腺癌识别识别-VGG16实现

本文为🔗小白入门Pytorch内部限免文章 🍨 本文为🔗小白入门Pytorch中的学习记录博客🍦 参考文章:【小白入门Pytorch】乳腺癌识别🍖 原作者:K同学啊 在本案例中,我将带大家探索一下深…

2023年正版win10/win11系统安装教学(纯净版)

第一步:准备一个8G容量以上的U盘。 注意,在制作系统盘时会格式化U盘,所以最好准备个空U盘,防止资料丢失。 第二步:制作系统盘。 安装win10 进入windows官网 官网win10下载地址:https://www.microsoft.c…

OpenCV学习(六)——图像算术运算(加法、融合与按位运算)

图像算术运算 6. 图像算术运算6.1 图像加法6.2 图像融合6.3 按位运算 6. 图像算术运算 6.1 图像加法 OpenCV加法是饱和运算Numpy加法是模运算 import cv2 import numpy as npx np.uint8([250]) y np.uint8([10])# OpenCV加法 print(cv2.add(x, y)) # 25010 260 > 255…

基于springboot零食商城管理系统

功能如图所示 摘要 这基于Spring Boot的零食商城管理系统提供了强大的购物车和订单管理功能。用户可以在系统中浏览零食产品,并将它们添加到购物车中。购物车可以保存用户的选购商品,允许随时查看已选择的商品和它们的数量。一旦用户满意,他们…

并发编程 - 并发可见性,原子性,有序性 与 JMM内存模型

1. 并发三大特性 并发编程Bug的源头: 原子性 、 可见性 和 有序性 问题 1.1 原子性 一个或多个操作,要么全部执行且在执行过程中不被任何因素打断,要么全部不执行。 在 Java 中,对基本数据类型的变量的读取和赋值操作是原子性操…

RabbitMQ-死信交换机和死信队列

1. 简介 DLX: Dead-Letter-Exchange 死信交换器,死信邮箱 2.代码示例 Configuration public class RabbitConfig {final static String exchangeNormalName "exchange.dlx.normal";final static String queueNormalName "queue.dlx.normal"…

如何做好一次代码审查,什么样是一次优秀的代码审查,静态代码分析工具有哪些

代码审查是确保代码质量、提升团队协作效率、分享知识和技能的重要过程。以下是进行优秀代码审查的一些指南: 如何做好代码审查: 理解代码的背景和目的: 在开始审查前,确保你了解这次提交的背景和目的,这有助于更准确…

Android---Bitmap详解

每一个 Android App 中都会使用到 Bitmap,它也是程序中内存消耗的大户,当 Bitmap 使用内存超过可用空间,则会报 OOM。 Bitmap 占用内存分析 Bitmap 用来描述一张图片的长、宽、颜色等信息,可用使用 BitmapFactory 来将某一路径下…

Mac版好用的Git客户端 Fork 免激活

Fork是一款强大的Git客户端软件,在Mac和Windows操作系统上都可以使用。汇集了众多先进的功能和工具,可以帮助用户更方便地管理和控制Git仓库。 Fork的界面简洁直观,易于使用。它提供了许多高级的Git功能,如分支管理、合并、提交、…

【CSS】伪类和伪元素

伪类 :hover:悬停active:激活focus:获取焦点:link:未访问(链接):checked:勾选(表单)first-child:第一个子元素nth-child():指定索引的子元素&…