表的约束【mysql数据库】

news2024/9/26 3:26:49

表中一定要有各种约束,通过约束来保证未来插入表格的数据是符合预期的。约束本质是通过技术手段倒闭程序员插入正确的数据。反过来,站在mysql视角,插入进来的数据,都是符合数据约束的。

约束的最终目标:保证数据的完整性和可预期性。

目录

一、空属值 

二、默认值

 三、列描述

四、zerofill

五、 主键

复合主键

六、自增长

七、唯一键

八、 外键


一、空属值 

mysql中NULL表示没有,NULL不参与计算,单引号和双引号都表示空字符串(一般用单引号) 

两个值:null(默认的)和 not null(不能为空) 

数据库默认字段基本都是字段为空,但实际开发时,尽可能保证字段不为空,因为数据为空无法参与运算。 

可以发现,插入数据时,设置了not null属性的列是不允许为空的。

二、默认值

默认值:某种数据会经常性的出现某个具体的值,可以在一开始就指定好,在需要真实数据的时候,用户可以选择性地使用默认值。

 

如果既指定not null 又指定default会怎样?

通过测试我们可以发现:只要设置了not null,我们就无法插入null,如果没有明确指定一列要插入,用的是default,如果建表时没有设置default值,就无法直接插入,设置了default值,就用的是default值。

default和not null不冲突,他们是互相补充的。

为什么我们平时建表时没有设置default值,却还是可以缺省插入呢?

原因是mysql会默认自动给我们加上default  NULL

如果建表时带了not null,mysql就默认不设置default

 三、列描述

comment,没有实际含义,专门用来描述字段(类似语言中的注释)

四、zerofill

数字类型后圆括号里带上数字int (10)是什么意思?

可以看到,我们建表的时候没有带(10),但mysqld给我们优化了一下。

此时,我们尝试给b这列加上zerofill:

此时:表中的数据就变成了这样:

zerofill的作用就是当数据的宽度小于指定宽度(圆括号内的数字)时,自动补0。

默认有符号的11位宽度,无符号的10位宽度就足够了:

五、 主键

primary key用来唯一地约束该字段里面的数据,不能重复,不能为空,一张表最多一个主键,主键所在列通常是整数类型。(直白讲就是要有一列数据能标识这一行数据的唯一性,比如一个学生的学号)主键会默认加上非空约束。

主键冲突:

站在数据库的角度,根据主键一定可以唯一地找到一条对应的数据:

可以根据主键对数据进行准确的增删查改:

去掉主键:

另一种指定主键的方式:建表后再指定主键必须保证这一列是不冲突的,所以最后建表的时候就指定好主键:

复合主键

一个主键不一定只能定义一列,可以多列构成一个复合主键。

六、自增长

auto_increment:一般和主键搭配使用,可以无需指定自动增长,必须为整数,一张表最多一个自增长。

 也可以指定id为1000插入:

插入1000后,意味着将下一次插入的起始数字改成了1001,后面插入的元素就会从1001开始自增。

应用场景:比如注册QQ时,QQ号就是自增的。

七、唯一键

unique key:不能重复,但可以为空

unique强调唯一性,主键只是选择一列唯一键作为主键。

 通过上面测试可以发现,插入时id字段不能插入重复元素,但可以插入多个null值。

八、 外键

主表:班级表        从表:学生表

因为每个学生的班级id必须是在班级表里存在的,也就是说逻辑上不应该插入班级表里不存在的班级id,要起到约束的作用,可以使用外键约束。

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

此时,如果想插入一个不存在的班级是不行的:

如果想删除一个班级,在这个班级跟别的表还有关联时,也是删除不了的。

constraint 是给外键起名字,不起也有默认的:

  

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

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

相关文章

腾讯云优惠券、代金券、折扣券领取方法及使用教程

腾讯云作为国内领先的云计算服务提供商,一直致力于为广大用户提供高效、稳定、安全的云服务。为了吸引用户上云,腾讯云经常推出各种优惠活动,其中就包括腾讯云优惠券。下面小编将详细介绍腾讯云优惠券的相关信息,包括种类、领取入…

力扣---完全平方数

思路: 还是比较好想的,g[i]定义为和为 i 的完全平方数的最少数量。那么递推关系式是g[i]min(g[i-1],g[i-4],g[i-9],...)1,数组初始化是g[0]0,g[1]1。注意这里要对g[0]初始化,(举个例子)因为在遍历到g[4]时&…

算法系列--递归

一.如何理解递归 递归对于初学者来说是一个非常抽象的概念,笔者在第一次学习时也是迷迷糊糊的(二叉树遍历),递归的代码看起来非常的简洁,优美,但是如何想出来递归的思路或者为什么能用递归这是初学者很难分析出来的 笔者在学习的过程中通过刷题,也总结出自己的一些经验,总结来…

[数据集][目标检测]高质量铁路轨道缺陷检测数据集VOC+YOLO格式1050张6类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):1050 标注数量(xml文件个数):1050 标注数量(txt文件个数):1050 标注…

Altair CFD™ 无比宽广的 CFD 仿真解决方案范围

Altair CFD 提供了一套全面的工具来解决流体力学问题。无论您是要对建筑物进行热分析、预测车辆空气动力学、优化齿轮箱加油、降低冷却风扇噪音还是开发创新医疗设备,Altair CFD 都可以提供帮助。 提供多种方法,包括: 用于热和通用应用的通…

公职人员上班时间看股票,该不该上纲上线?

公职人员炒股是一个复杂的问题,需要综合考虑多方面的因素。首先,炒股作为一种个人投资行为,本身并不违法,但在特定情况下,公职人员参与股市投资可能会引发一些问题和争议。 对于公职人员炒股,关键是要确保其…

vue@2.7.16 使用less、less-loader

遇到问题,npm install less-loader7.3.0 --save安装好less-loader后,执行npm run serve 项目运行不起来,排查后发现在安装less-loader后就提示需要安装less,正确的安装应如下: npm install less less-loader7.3.0 --sa…

docker实践教程,mysql中使用自定义目录实现数据挂载(二)

有一些知识点在docker实践教程,nginx中使用数据卷映射修改前端网页(一),就不累述了。 下载mysql的镜像 docker pull mysql创建容器 先去Docker Hub看看mysql是怎么使用的 可知,运行命令为:(…

vue-admin-template极简的 vue admin 管理后台的动态路由实现方法

项目源码地址:GitHub - PanJiaChen/vue-admin-template: a vue2.0 minimal admin template 注意:项目中的路由均写在 src\router\index.js 中,其中默认包含 constantRoutes 数组,这是固定路由,无论用户是什么角色&…

数据结构从入门到精通——冒泡排序

冒泡排序 前言一、冒泡排序的基本思想二、冒泡排序的特性总结三、冒泡排序的动画演示四、冒泡排序的具体代码test.c 前言 冒泡排序是一种简单的排序算法,通过重复遍历待排序数列,比较相邻元素的大小并交换位置,使得每一轮遍历后最大&#xf…

ubuntu内存不足,用Swap扩展增加虚拟内存

Linux增大Swap分区,可以增加虚拟内存,以解决电脑卡机,内存不足等问题 top可以查看cpu的使用情况 lscpu可以查看本机配置的cpu硬件情况 查看内存使用情况 free -h (下面显示"交换"或者Swap等字样说明系统已经启动了Swap&#xff…

EMC Unity存储系统(包含VNXe)常用检查命令

DELL EMC的Unity存储系统,包括VNXe存储系统的OS已经完全和Clariion 的VNX不同了,近期遇到很多关于EMC unity存储系统故障的一些初步检查需求,下面是一些对于DELL EMC Unity存储系统的最常用的底层检查命令,可以对系统故障有个初步…

深度学习——线性代数相关知识

线性代数基础知识 一、线性代数基础知识1、标量2、向量3、矩阵4、张量5、点积6、向量—矩阵积7、矩阵—矩阵乘法 二、小结 一、线性代数基础知识 本节将介绍简要地回顾一下部分基本线性代数内容,线性代数中的基本数学对象、算术和运算,并用数学符号和相…

Linux编程4.11 网络编程-广播

广播实现一对多的通讯 它通过向广播地址发送数据报文实现的 1、套接字选项 套接字选项用于修饰套接字以及其底层通讯协议的各种行为。函数setsockopt和getsockopt可以查看和设置套接字的各种选项。 #include <sys/types.h> #include <sys/socket.h>int getso…

申请免费IP地址证书

目录 IP申请SSL证书需要满足什么条件呢&#xff1f; 为什么需要申请IP地址证书&#xff1f; 支持IP地址SSL证书类型 DV级别IP SSL证书和OV级别IP SSL证书的区别 申请公网IP地址证书有免费的吗&#xff1f; 背景&#xff1a;当用户直接通过IP地址而非域名访问网站时&#xf…

后端如何返回404地址

当我们网站输入不存在的地址&#xff0c;经常会出现404的页面&#xff0c;这是如何做到的 1.添加配置 spring:mvc:view:prefix: /templates/suffix: .html 2.resources下添加templates目录&#xff0c;下面放404的网站 3.添加依赖&#xff0c;版本在主pom里面配置好了&#x…

霍格沃兹测试开发从人员外包到测试工具、测试平台,提供全方位的测试解决方案~

随着学社的学员越来越多&#xff0c;影响力越来越大&#xff0c;不停有学员和企业问我们&#xff1a;能否提供人员外包服务&#xff1f;与此同时&#xff0c;企业对于外包人员的业务技能要求也越来越高&#xff0c;寻找一个稳定靠谱的供应商也成了很多学员所在公司的需求。对此…

web前端常用标签(html)

1.定义 1.1标签 语法规范&#xff1a;<标签名 属性名"属性值">标签名</标签名> 标签之间可以嵌套 1.2属性 定制元素的行为的。属性是不通用的&#xff0c;每一个标签存在自身的属性。当属性名属性值时&#xff0c;可以只写属性值 2.HTML常用标签 2…

【人工智能Ⅱ】实验2:VGG图像分类

实验2&#xff1a;VGG图像分类 一&#xff1a;实验目的与要求 1&#xff1a;掌握VGG网络的原理与结构。 2&#xff1a;学会利用VGG网络建立训练模型&#xff0c;并对模型进行评估。 3&#xff1a;学会使用VGG网络进行分类。 二&#xff1a;实验内容 1&#xff1a;用VGG网络…

扩展欧拉定理

为了求a^bmodm的余数,我们可以利用扩展欧拉定理给出的同余方程,转化成一个好求的式子,首先我们要能够解出欧拉函数.欧拉函数讲解可以看看这篇欧拉函数最全总结-CSDN博客(原理我不懂,只会用) 下面给出代码 using i64 long long; int phi(int n) {int res n;for (int i 2; i…