MySQL中表的约束

1,概念

表中一定要有各种约束,通过约束,让我们来插入数据库中的数据是符合预期的。

约束本质是通过技术手段,倒逼程序员插入正确的数据;反过来,站在MySQL的角度来单,内部已经插进来的数据,都i是符合数据约束的数据。

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

为了完成以上的所有目标,就需要除了数据类型自带的范围约束以外的更多约束。

2,空属性

在MySQL里,null表示没有而不是0,' '代表空串。

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

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

操作:在创建表后面加上not null;

可以看到,在创建元素的时候加了 not null,在查看表的时候Null列里就会显示NO。

那么插入操作:

可以看到,insert里不对加了空约束的值插入数据时系统会报错,当然可以插入空串;还有一个操作也无法插入数据:

3,默认值

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

例子:

可以看到,表中default这一列出现了值,接下来我们插入几个值测试一下:

可以看到,在我们不输入值的时候就会默认给我们输入缺省,在用户输入元素的时候,就会选择用户输入的元素插入。

可以看到,我给age设置了not null 和 default:

可以看到,就算加了not null 没对age指定插入时不会报错,且使用的时缺省值,但是指定对age插入空的话就会报错。

在我们日常使用中,not null和default是互相补充的。

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

4,列描述

操作:comment + 内容

没有实际含义,更类似于我们平时写代码的注释:

5,zerofill

刚开始学习数据库时,很多人对数字类型后面的长度很迷茫。通过show看看text14表的建表语句:

可以看到int(11),这个代表什么意思呢?整型不是4字节码?这个11又代表什么呢?其实没有zerofill这个 属性,括号内的数字是毫无意义的。age和id列就是前面插入的数据,如下:

那么我们稍微改一下id的属性,在后面加上zerofill:

可以看到,在id加了zerofill的约束之后,在100前面会补零,其总位数就是11位,正好对上

int(11)的括号里的值,那么改完属性之后里面的100的值会不会发生改变?

可以用where查到,值是不会发生改变的。

那么zerofill的作用在哪里?

可以在固定的长度中让表的宽度保持一直以维持美观,当然如果插入的位数大于zerofill定义的位数,也可以成功插入,但是超过的位数会有图出:

6,主键

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

那么我们来插入数据测试一下:

可以看到,当我们插入重复的数据的时候,系统会拦截不给我们插入:

可以看到,也不能往里面插入空值.

那么如何去掉主键?

以为整个表里就一个主键,所以直接指明要删主键系统自动就会帮我们删除。

在删除了主键之后,我们就可对其进行插入重复值的操作:

那么如何插入主键?

可以看到,我们要把表内重复的数据和null清理了才可以插入主键。

7,复合主键

我们知道,一个表中主键只有一个,但是不意味着一个表的主键只能添加一列,这种多列主键的操作叫做复合主键。

操作:

可以看到key位置的id和course位置都有pri,现在我们对他插入测试:

这就是复合主键的使用方法。

8,主键子问题:自增长

auto_increment:当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值 +1操作,得到一个新的不同的值。通常和主键搭配使用,作为逻辑主键。

可以看到,id在我们不插入值时他会固定增长,要是插入的值和表中id相同则会报错。

我们可以指定某个数字开始加一:

也可以在创建表时,在表的结尾写:auto_increment = 500来改想要的id起始值:

9,唯一键(可以为空)

一张表中有往往有很多字段需要唯一性,数据不能重复,但是一张表中只能有一个主键:唯一键就可以 解决表中有多个字段需要唯一性约束的问题,除了可以为空,其他操作和主键相同,如果想让值不为空,可以加not null。

关键字:unique

那么我们来插入一下数值看看:

可以看到,插入的id不能重复,但是可以为空。

主键选择了某个元素为主键,这时如果其他值也有唯一性的时候,可以用唯一键来补充,唯一键与主键并不冲突,他们是相互补充的。

例如个人id和telphone(电话),都是唯一的。

10,外键

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

语法:foreign key (字段名) references 主表(列)

我们在进行复杂的表管理时,难免不了经常有表与表之间有精密的联系,这个时候我们可以用外键来相互对两张表进行相互约束:

接下来看案例:

我们可以看到,表与表之间存在某种关联,主表是calss,从表是student,这时我们可以使用外键命令来约束,一般外键写在从表:

那么我们来插入数据测试一下:

可以看到,在符合主表的条件下可以插入,但是不符合主表约束条件的不给插入

如果从表有数据,那么主表的相关的数据不能被删掉:

希望对你们有帮助。

相关推荐
2401_857617622 分钟前
Spring Boot框架在中小企业设备管理中的创新应用
数据库·spring boot·后端
会飞的土拨鼠呀9 分钟前
Centos7.9安装MySQL(二进制)
android·数据库·mysql
白总Server11 分钟前
Gateway解说
服务器·网络·数据库·web安全·架构·php·idc
激流丶14 分钟前
【Mysql 深入探索】InnoDB 实现事务的机制
数据库·mysql·innodb
优维科技EasyOps23 分钟前
MongoDB 8.0 全新登场:究竟如何?
数据库·mongodb
hangbobo23 分钟前
监测mongodb服务并启动
数据库·mongodb
小黑哪有坏心思!1 小时前
Linux安装部署数据库:MongoDB
linux·运维·数据库·mongodb·nosql
搬码后生仔1 小时前
在 Windows 系统上设置 MySQL8.0以支持远程连接
数据库
菠萝加点糖1 小时前
ADB指定进程名称kill进程
数据库·adb
Karoku0661 小时前
【MySQL数据库】MHA高可用
linux·运维·服务器·数据库·mysql