【MySQL】表的约束

news2025/4/7 20:53:43

前言

        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.coloradmin.cn/o/415043.html

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

相关文章

OpenCV实战之人脸美颜美型(七)——美颜demo

前言 之前我们已经完成了人脸检测、肤色检测、磨皮、美白功能,这一篇文章中我们将尝试利用OpenCV中的滑动条对象,结合窗口制作一个简单的demo。demo中会将上述功能集成进来,并通过滑动条来调整美白、磨皮力度观察其效果,先放一张效果图如下。 滑动条 OpenCV中可通过crea…

【Fluent】Run can not be started until validation issues are resolved.

一、问题背景 因为在fluent中用Discard Data, Replace Mesh选项替换了网格,但是没有抛弃算例设置等参数。 当时我以为网格是完全一样的,便忽略了产生冲突/错误的可能。 之后在calculate的时候,报错:Run can not be started unt…

联盟链是虚构的?没有用的?用FISCO BCOS来展示链委员这件事

前言 当前区块链大都使用的是投票决定这种方法,但是如何使现实中的投票转换到区块链中,如何让举手表决变得更加智能,如何让投票透明、安全、权威,这是区块链的一大设计思路,有很多人觉得联盟链是个梦,是个虚…

分享一个国内可用的免费ChatGPT网站

背景 ChatGPT作为一种基于人工智能技术的自然语言处理工具,近期的热度直接沸腾🌋。 作为一个程序员,我也忍不住做了一个基于ChatGPT的网站,免费!免登陆!!国内可直接对话ChatGPT,也…

十年磨一剑,你要的低代码平台在这里

目录低代码平台现状没有创新的“拼凑”,没有好东西ivx平台是什么ivx与其他平台的区别产品思路不同用户不同学习价值不同应用范围不同有无框架限制总结低代码开发平台已成为企业数字化转型和应用程序开发的重要工具。它们提供了一种快速创建和部署应用程序的方法&…

【MySQL】DDL数据库、表的创建与管理

一、基本概念 1、从系统架构的层面来看,数据库从大到小依次是数据库服务器(上面安装了DBMS和数据库)、数据库(也称database或者schema)、数据表、数据表的行与列 二、创建和管理数据库 1、创建数据库 直接创建:CREATE DATABASE 数据库名;(使用默认的…

这篇文章价值很大:股票历史分时成交数据怎么简单获取?【干货】

文章目录前言一、准备二、使用步骤1.引入库2,使用这个API查询历史分时数据:3.查询完整历史分时数据4.其他查询方法参数格式:[(市场代码, 股票代码), ...]参数:市场代码, 股票代码, 文件名, 起始位置, 数量参数:市场代码…

【MySQL】(3)约束

文章目录表的约束空属性默认值列描述zerofill主键概念使用 alter 添加和删除主键联合主键如何设计主键自增长唯一键外键表的约束 所谓约束,就是不让你做某事,约束的存在,有助于程序员和用户合法合理地使用数据库。 数据类型其实就是对字段的…

【C++】位图的概念

文章目录位图的引入什么是位图位图的应用bitset的使用定义方式成员函数bitset的运算符重载>> 及 << 运算符赋值,关系,复合赋值,单目运算符[]重载位图的引入 无序的40亿个不重复的无符号整数,给一个无符号整数,如何判断一个数是否在这40亿个数中【腾讯面试题】 方法…

记一次浏览器下载错误处理-失败网络错误

背景 最近在自己电脑上Chrome浏览器正常使用&#xff0c;但只要是下载软件&#xff0c;就会在下载几十秒后&#xff0c;自动停止&#xff0c;报失败-网络错误&#xff0c;导致文件都下载不成功&#xff0c;如下图。 猜测是更改了哪块的配置&#xff0c;导致一直中断&#xff0…

28岁,终于从字节退休了...

大厂一直是每个程序员都向往职业目标&#xff0c;大厂意味着薪资高、福利好、倍有面儿&#xff0c;而且发展空间也大。甚至有人调侃不想进大厂的程序员不是好程序员。 而在网上&#xff0c;也有各个网友分享自己在大厂的经历&#xff0c;在某平台还有一个近2600万浏览的话题&a…

JavaEE——了解Spring,容器,Ioc,DI相关概念

目录 一、Spring 是什么 二、什么是容器 三、什么是loC 1. 什么是 IoC 2. 传统程序开发和控制反转式程序开发 (1). 传统程序开发 (2). 控制反转式程序开发 (3). 对比 3. Spring的功能 4. 将对象存放到容器中的好处 四、DI概念说明 IoC和DI的联系和区别&#xff1f;…

算法 贪心1 || 455.分发饼干 376. 摆动序列 53. 最大子数组和

基础知识 什么是贪心&#xff1a;贪心的本质是选择每一阶段的局部最优&#xff0c;从而达到全局最优。 但是贪心没有套路&#xff0c;做题的时候&#xff0c;只要想清楚 局部最优 是什么&#xff0c;如果推导出全局最优&#xff0c;其实就够了。 455.分发饼干 很容易想到&am…

Emlog底部显示当前在线人数

第一步&#xff1a;在模板文件里面创建“visitor.php”的文件吧下面代码入进去 code <?php//首先你要有读写文件的权限&#xff0c;首次访问肯不显示&#xff0c;正常情况刷新即可$online_log "slzxrs.dat"; //保存人数的文件到根目录,$timeout 30;//30秒内没…

计算机视觉__基本图像操作(显示、读取、保存)

计算机视觉__基本图像操作&#xff08;显示、读取、保存&#xff09; 本文目录&#xff1a; ✨ 一、前言 ✨ 二、图像显示&#xff08;使用OpenCV和Matplotlib显示图像&#xff09; &#xff08;1&#xff09;、使用OpenCV显示图像 &#xff08;2&#xff09;、使用Matplotl…

密集场景下的行人跟踪替代算法,头部跟踪算法 | CVPR 2021

一个不知名大学生&#xff0c;江湖人称菜狗 original author: Jacky LiEmail : 3435673055qq.com Time of completion&#xff1a;2023.4.8 Last edited: 2023.4.8 目录 摘要 主要内容 结果 这篇文章是CVPR 2021 的最新论文&#xff0c;文章的标题&#xff1a; 文章的主要内…

C#,数值计算的进化与发展——FORTRAN 77/80/95源程序 转C# 源程序的软件F2C#

1 F2C#FORTRAN 77/80/95源程序 转C# 源程序的软件 1.1 F2C#起源 全世界科学计算领域在超过40年的时间里累积了巨大数量的FORTRAN源程序&#xff08;尤其以FORTRAN77居多&#xff09;&#xff0c;实际上目前的许多大型科学软件还是以这些代码为基础的。众所周知的原因&#xf…

【youcans的深度学习 06】PyTorch入门教程:张量的基本操作

欢迎关注『youcans的深度学习』系列&#xff0c;持续更新中… 【youcans的深度学习 01】安装环境之 miniconda 【youcans的深度学习 02】PyTorch CPU版本安装与环境配置 【youcans的深度学习 03】PyTorch CPU版本安装与环境配置 【youcans的深度学习 04】PyTorch入门教程&#…

t-SNE进行分类可视化

0、引入 我们在论文中通常可以看到下图这样的可视化效果&#xff0c;这就是使用t-SNE降维方法进行的可视化&#xff0c;当然除了t-SNE还有其他的比如PCA等降维等方法&#xff0c;关于这些算法的原理有很多文章可以借阅&#xff0c;这里不展开阐释&#xff0c;重点讲讲如何进行…

window10 更新提示 0x80073712错误

解决方法&#xff1a; 1、可以尝试重新配置一下 Windows 更新服务状态&#xff1a; 2、Win S打开搜索&#xff0c;输入 CMD 找到 “命令提示符”&#xff0c; 3、右键以管理员身份打开&#xff0c;依次输入以下代码&#xff0c;并按回车执行。注&#xff1a;是一条一条的执行…