当前位置: 首页 > article >正文

【MySQL】表的约束

前言

        hi~大家好呀,欢迎来到我的MySQL学习笔记系列~

        继上次数据类型的描述,这篇笔记重点记录DDL-数据定义语言对表的结构中的其他约束条件进行说明,以便让关系型数据库真正的保持完整性。

我的上一篇MySQL笔记~

【MySQL】表的操作和数据类型_柒海啦的博客-CSDN博客

 

目录

1.空属性

2.默认值

3.列描述

4.补零

5.主键

6.自增长

7.唯一键

8.外键


1.空属性

        每个数据类型没有加约束的话,默认为空属性。即可以不插入NULL。

        空属性为NULL,不可为空属性为NOT NULL。

        需要注意的是,实际开发中,数据为空时无法参与计算的,所以经可能的保证字段不为空。

        创建两表后,可以查看其null属性:

         插入的话就可以发现t1表可以插入NULL值,t2表不可插入NULL值哦~

2.默认值

        如果不输入数据,会自动填入默认数据的属性。

default 默认值;

        需要注意,默认值的生效需要在插入的时候不显示对其插入即可。(即在values前的属性指定中不显示表示其属性)

 

        在对t4表插入实例的时候,想要默认值id生效,不对其显示插入即可:

 

        另外,针对于not null和default这两个约束条件,是可以并存的。如果不是显示插入的话,默认值就会进行生效。如果显示插入,那么not null的存在是无法插入NULL值的。

  

3.列描述

comment '描述字段';

        没有特殊的含义,可以通过show create table 表名;进行查看,用于程序员做属性结构时候的批注。

4.补零

int(n) zerofill......;

        首先,适用于整数类型。对于整数类型后面的()来说(比如tinyint(n)、int(n)、bigint(n)),只有加上zerofill才会生效,表示在指定宽度内,如果没有填充完会使用0进行填充。由于全用0填充话,是无法使用负数的,所以使用zerofill会自动设置为unsigned无符号类型的。

        如果输入超出长度的话则不会填充额外的0.

 

 

 

5.主键

primary key;

primary key(...);

        当我们想要一个表中能够区别元组(记录)的一个属性或者属性组中的其中一个,就可以成为主键。其中符合主键只能使用第二行进行定义,对于符合主键来说,其中的任何一个都不能作为主键(也就是说任何一个非真子集均不可唯一区分记录,只有属性组合在一起才能表示记录的完整性)

        主键通常会自己带上的限制:记录唯一性+非NULL。

        需要注意,一个表最多一个主键,否则没有。

        我们为什么需要主键?

1.查找的时候确定唯一性

2.插入的时候不能出现重复的数据。

3.改的时候确定一个唯一的记录。

4.删的时候确定一个唯一的记录。

        也就是说我们需要找到一个唯一的指定记录即可。

        另外,对于DDL语言中,我们可以使用alter进行删除主键和添加主键。

-删除主键:

alter table 表名 drop primary key;  -- 直接丢弃即可

 -添加主键:

alter table 表名 add primary key(属性组);

        对于添加主键需要特别注意。因为添加主键的话,可能是由于前面表的结构没有定义完整,可能中间插入了很多数据。如果对于此主键属性来说,里面的数据不满足主键的条件的话就很容易出错,这样就会很麻烦。

 

6.自增长

auto_increment;

        自增长又被称为逻辑主键,通常配合主键一起使用。

        加上此约束条件的属性,如果不主动赋值,会从1开始,向后逐渐增加(给此列添加值)。如果更新值,之后会以此属性的最大值进行更新。实际上,此特性取决于在create的时候,会在表结构的外面增加变量auto_increment=? 当插入一个值后会跟新为下一个值默认的值。

        注意:

    1.如果没有主键,必须此列是主键。primary key
    2.此时在扩展就会发现自动增长 auto_increment;
    3.插入的时候,此列就完全可以不用管了。不用显示指明插入
    4.插入后,使用show create table test;  查看,会发现后面属性会加上) auto_increment=n;// 此时自动会维护一个计数器。
    5..如果主动插入自然是可以进去的。可以显示指明数据(不冲突即可)。
    6..如果显示插入后,后续不指定的话,会从之前显示指定插入的最大值id + 1.因为显示插入的时候,计数器会进行维护的。
    7.自然可以自己设置默认计数器,在creat()auto_increment=num;进行设计即可。

    8.注意整张表只能存在一个auto列,并且必须被定义为唯一属性(设计为主键的话就是primary,否则就是unique唯一约束属性,后面会讲)

    9.auto_increment必须设置为非负整数

         创建只有一列的primary key自增长属性。

         可以自己在create的时候设置auto_increment:

 

         后续第一次默认插入果然自动赋值为100了,后续就会从100或者插入的最大值开始相加。

7.唯一键

unique;

        唯一键很简单,就是在对于此属性约束条件中的数据来说,每一个都是独一无二的。这点和primary key类似,唯一不同的就是它可以为空

        现实中,一个记录的很多属性具有很多唯一性的值。但是此时并没有设置为主键。而主键只是在众多具有唯一性的属性列中被选择成为主键而已,而其他字段的唯一性,也要保证其的唯一性。由于主键只能由一个,mysql提供了一种保证数据唯一性的方案。
        主键为了保证在查找的时候,找到唯一的一条记录。
        唯一键:更多是保证在表中,各个不同的值,一定在mysql层面也要保证其的唯一性。当然,如果也设置约束not null,此时约束方面就和主键一样了primary key;

8.外键

foreign key () references 主表(列)

        对于关系型数据库,自然需要建立表和表之间的参照关系。

        比如,在学校中成绩表就要和学生表进行对应起来。成绩表中出现的学生名字必须参照于学生表中出现过的学生名字,不可错误或者没有。所以,此时对于这两张表来说,成绩表中的学生属性就是一个从表中的属性,学生表中的学生是主表中的唯一限制的属性

        对于主表来说,此属性必须是primary key或者unique约束条件。(参照必须准确可靠)

        那么此时,外键所组成的关系就是有关系 + 有约束 = 外键约束。能够保证表和表数据完整性和一致性。对于外键来说,也是可以null,这一点也和主键不一样。

 


http://www.kler.cn/a/10216.html

相关文章:

  • 图片画廊 day2 (可复制源码)
  • 11张思维导图带你快速学习java
  • 时序数据库TimescaleDB安装部署以及常见使用
  • 大数据技术之HBase中的HRegion
  • 使用pytest+openpyxl做接口自动化遇到的问题
  • 深度学习之 LSTM
  • Wijmo JavaScript UI 5.20222.877 Crack
  • ESLint的配置
  • 使用向量机(SVM)算法的推荐系统
  • Flutter系列(七)ListView 图文列表详解
  • sourcemap文件泄露漏洞
  • C++开发必知的内存问题及常用的解决方法-经典文章
  • 算法自学__ 莫队
  • 比较系统的学习 pandas (2)
  • 18从零开始学Java之switch分支语句中该怎么用?
  • 【工作感悟】老程序员总结的四条工作经验教训
  • 表格软件界的卷王,Excel、access、foxpro全靠边,WPS:真荣幸
  • 3.1.2栈的顺序存储实现
  • 十分钟教你部署一个属于自己的chatgpt网站
  • WebSpider蓝蜘蛛网页抓取工具5.1用户手册
  • 10.网络爬虫—MongoDB详讲与实战
  • 多元函数的基本概念——“高等数学”
  • 编译原理期末速成笔记
  • 最详细的Ubuntu服务器搭建Stable-Diffusion教程(无显卡,仅用CPU)
  • 【CV】Latent diffusion model 扩散模型体验
  • Eyeshot Ultimate 2023 Crack