MySQL学习记录——유 表的约束

文章目录

  • 1、了解
  • 2、空属性
  • 3、默认值default
  • 4、列描述comment就是注释,desc看不到,show能看到。
  • 5、zerofill
  • 6、主键
  • 7、自增长auto_increment
  • 8、唯一键
  • 9、外键


1、了解

只有数据类型的约束肯定不够,mysql还有表的约束来进而保证数据合法性。约束是通过技术手段倒逼程序员插入正确数据,凡是能插进mysql的数据,都是符合数据约束的。约束能够保证数据的完整性和可预期性。

2、空属性

默认值为null,另外一个值是not null,也就是不为空。null在mysql中表示没有。null不参与计算,如果是’',则表示空字符串,也可以写成"",两者在mysql中都是字符串,这时候就是有而不是没有。设置not null就会倒逼着让这列数据必须不为空,必须得有数据。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

即使第2个位置写上NULL也不行,因为是not null。not null在刚开始时缺省值为NULL,也就是默认值。

3、默认值default

缺省值default,可以自己设定,不设定就是NULL。

在这里插入图片描述

如果一个列是not null的,那么我们插入NULL肯定不行,会报错not null;如果不插入,且这个列也没设置默认值的话,会报默认值错,这两个报错是不同的。not null和default是互补的。

插入的数据要么是NULL,要么是合法数据;用户忽略这一列时,使用默认值就无事,没有默认值就报错。所以mysql对字段默认是由default,可以为NULL。

not null和default一般不需要同时出现,因为default本身有默认值,不会为空。

4、列描述comment就是注释,desc看不到,show能看到。

5、zerofill

在这里插入图片描述

int默认后面有个10。修改一下表的属性。

在这里插入图片描述

不加not null就会变成可为空了,因为modif是覆盖,所以还是要加上not null。

此时b中的数据已经改变了

在这里插入图片描述

b中的两个数字每个都是10个数字,所以zerofill就是在长度不够时填充0。

可以让b以16进制显示

select a, hex(b) from t11;

在这里插入图片描述

int括号内的数字配合zerofill,意思就是数字的个数不够括号内的数,前面就补零,够了或者超过就正常显示。

int无符号是默认10位,有符号是11位,因为int类型有符号的范围是负2的31次方 ~ 2的31次方减1,无符号则是2的32次方减1,无论是哪个,10个位置都足够表示了,有符号多1位是符号位。

zerofill不影响存储,只影响显示。

6、主键

用主键修饰的一列数据不能为空,不能重复。一个表只能有一个主键,主键所在的列通常是整数类型。

在这里插入图片描述

Key里会设置成PRI,Null那里也是NO。

在这里插入图片描述
在这里插入图片描述

修改是可以的

在这里插入图片描述

改变主键的方法除了创建时添加,还有别的办法。

alter table 表名 drop primary key; (去掉主键约束)
alter table 表名 add primary key(列名); (建好表后添加主键)

添加主键前表里不能由同样的列名,要不会报错。删除时可以这样写

delete from 表名 where 列名=‘’; (按照列名不重复的来删)

添加后desc和show都能看到主键。

主键可以被添加到一列或者多列,添加到多列,多列数据就是复合数据。

在这里插入图片描述

这时候可以让其中一列出现重复数据,但是多列不能同时重复,即使不属于复合数据的列的数据和之前插入的不同。

7、自增长auto_increment

必须与主键搭配使用,一个表只有一个自增长,自增长字段必须是整数。

在这里插入图片描述

自增长会帮用户管理插入的数据,下图体现了自增长,自增长从当前列最大的数字开始边插入边增长。

在这里插入图片描述

当然,因为有主键,不能有重复的,所以像上图那样,插入同一个id的肯定错误。

在这里插入图片描述

可以看出来,show里写着49,也就是下一个id,可以用这个命令获取,得到的结果加1就是show里的id。

select last_insert_id();

也可以手动改变。

在这里插入图片描述

8、唯一键

unique。

在这里插入图片描述

在这里插入图片描述

错误出现在id列,也就是有唯一键的列。不过如果是唯一键的列可以为空,也就是NULL可以有多个。

主键和唯一键并不是互相冲突,选定哪些为主键并不妨碍要保证其它列的唯一性;主键不允许为空,唯一键允许为空;主键是在整个表中要标定的唯一,唯一键则是保证该列的唯一;主键体现在标识唯一性,唯一键保证业务唯一。

在这里插入图片描述

也可以让唯一键不为空,加上not null就行。

在这里插入图片描述

9、外键

外键体现在表跟表之间的关联和约束。


在这里插入图片描述

可以看到,有个classid是3的,虽然不符合要求,但也能插入,这是不合理的;另一个例子就是删除class的id1,student也不受影响,但也不合理。这部分的逻辑可用程序员来操控,但也需要数据库这里来报错警告程序员。上面student的class_id和class的id之间用外键来约束。

重新创建一下

在这里插入图片描述
在这里插入图片描述

MUL就是外键约束。

在这里插入图片描述

当然删除已有数据的也不行,删掉不存在数据的,比如id=47,就没问题。

在这里插入图片描述

show一下可以看到外键默认名字

在这里插入图片描述

CONSTRAINT student_ibfk_1

也可以自定义名字,这里就不写了。

结束。

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

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

相关文章

OJ刷题:求俩个数组的交集(没学哈希表?快排双指针轻松搞定!)

目录 ​编辑 1.题目描述 2.C语言中的内置排序函数(qsort) 3.解题思路 3.1 升序 3.2双指针的移动 3.3 保证加入元素的唯一性 4.leetcode上的完整代码 完结散花 悟已往之不谏,知来者犹可追 …

(十七)springboot实战——spring securtity的授权流程源码解析

前言 本节内容是关于spring security安全框架授权流程的源码分析,spring security的授权流程主要是在FilterSecurityInterceptor过滤器中实现的。我们会通过源码层级的分析,了解清楚spring security的底层是如何实现用户授权的。 正文 1.配置一个请求…

【数据结构】一篇文章带你学会八大排序

一、排序的概念1. 排序的使用:2. 稳定性:3. 内部排序:4. 外部排序︰5. 排序的用途: 二、排序的原理及实现1. 插入排序1.1 直接插入排序1.1.1 直接插入排序在现实中的应用1.1.2 直接插入排序的思想及个人理解1.1.3 直接插入排序的排…

c入门第十篇——指针入门

一句话来说: 指针就是存储了内存地址值的变量。 在前面讨论传值和传址的时候,我们就已经开始使用了指针来传递地址。 在正式介绍指针之前,我们先来简单了解一下内存。内存可以简单的理解为一排连续的房子的街道,每个房子都有自己的地址&#…

【Flink状态管理(二)各状态初始化入口】状态初始化流程详解与源码剖析

文章目录 1. 状态初始化总流程梳理2.创建StreamOperatorStateContext3. StateInitializationContext的接口设计。4. 状态初始化举例:UDF状态初始化 在TaskManager中启动Task线程后,会调用StreamTask.invoke()方法触发当前Task中算子的执行,在…

SSH口令问题

SSH(Secure Shell)是目前较可靠、专为远程登录会话和其他网络服务提供 安全性的协议,主要用于给远程登录会话数据进行加密,保证数据传输的安全。 SSH口令长度太短或者复杂度不够,如仅包含数字或仅包含字母等时&#xf…

【Python4Delphi】学习笔记(一):介绍篇

一、前言: 1. python语言简介: 众所周知,python是目前非常流行的编程语言之一,自20世纪90年代初Python语言诞生至今,它已被逐渐广泛应用于系统管理任务的处理和Web编程。 由于Python语言的简洁性、易读性以及可扩展性…

【深度学习:SegGPT】在上下文中分割所有内容 [解释]

【深度学习:SegGPT】在上下文中分割所有内容 [解释] SegGPT与以前的模型相比如何?SegGPT在实践中是如何工作的?SegGPT培训计划上下文着色上下文集成上下文调整SegGPT 训练参数 如何尝试 SegGPT?使用哪些数据集来训练 SegGPT&#…

mac终端怎么恢复初始设置?图文教程不想看看吗?

某网友说“不小心把终端弄成了这样?请问该怎么办呢?mac终端怎么恢复初始设置?” 其实,这个问题不难,在终端中选择【还原初始值】即可。 Mac终端初始化具体怎么操作?话不多说,图文教程分享给大…

【Java】MybatisPlus入门

学习目标 能够基于MyBatisPlus完成标准Dao开发 能够掌握MyBatisPlus的条件查询 能够掌握MyBatisPlus的字段映射与表名映射 能够掌握id生成策略控制 能够理解代码生成器的相关配置 一、MyBatisPlus简介 1. 入门案例 问题导入 MyBatisPlus环境搭建的步骤? 1.1 Sp…

Spring + Tomcat项目中nacos配置中文乱码问题解决

实际工作的时候碰到了nacos中文乱码的问题,一顿排查最终还是调源码解决了。下面为具体的源码流程,有碰到的可以参考下。 对于nacos配置来说,初始主要源码就在NacosConfigService类中。里面有初始化获取配置content以及设置对应监听器的操作。…

猫头虎分析:如何利用ChatGPT及生成式AIGC提高工作效率 ‍

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …