MySQL 中表的约束 -- 空属性,默认值,主键,自增长,唯一键,外键

Mysql -- 表的约束 理论上,上面的例子,我们不创建外键约束,就正常建立学生表,以及班级表,该有的字段我们都有。auto_increment:当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值+1操作,得到一个新的不同的值。在公司中,需要一个员工管理系统,员工表中有2条信息,一个是身份证,一个是员工号,选择身份证作为主键,设计员工工号时不能有重复的,所以需要唯一键。在创建表的时候,在所有字段之后,使用primary key(主键字段列表)来创建主键,如果有多个字段作为主键,可以使用复合主键。 阅读详情

目录

1. 空属性

2. 默认值

3. 列描述

4. zerofill

5. 主键

6. 自增长

7. 唯一键

8. 外键


        真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束来更好的保证数据的合法性,业务角度上看用于保证数据的正确性。约束本质是通过技术手段保证用户插入正确的数据。

1. 空属性

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

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

        下列属性中的 Null 为 NO 表示插入时该字段不能为空,Null 为 YES 时,表示插入时该字段可以为为空。 

        当插入时,不对 class_room 字进行插入,就会插入默认值,这里报错是说没有默认值,所以插入失败。

        这里对 class_room 插入 null,会报错说 class_room 不能为 null。 这就叫做非空约束。

2. 默认值

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

         使用 show create table 表名 查出来的 name 字段是没有默认值的,而 desc 表名 查出来的是 name 字段默认值为 null。这里就有冲突,这时候以 show create table 表名 查出来的为准。

        在创建的时候设置 default 值,在查看表属性的时候 default 就是用户指定的值。

        插入时,当用户没有对有默认值的字段进行插入,则就会使用默认值进行填充。 

        如下图所示,name 字段没有默认值,所以在插入的时候没有明确指定 name 字段,插入失败。

知识点1:
       如果某一字段没有设置 default 值,那么在插入的时候必须明确指定该列的列名称进行插入,否则插入失败。如果某一字段设置 default 值,那么在插入的时候可以不用指定该列的列名称进行插入,默认有 default 值进行填充。换句话说,default 属性没有在插入时必须指定列名。
 

3. 列描述

        comment:没有实际含义,专门用来描述字段,会根据表创建语句保存,用于用户来进行了解。

        注:通过 desc 表名 是查看不到注释信息的,必须通过 show create table 表名 查看。 

4. zerofill

        zerofill 是一种显示上的约束,zerofill 的作用就是,如果数值类型宽度小于设定的宽度(数据类型后面的数字,比如:int(10)),自动填充 0。但是在数据库中存储的值没有改变,只是显示进行了格式化显示。添加 zerofill 约束之后,数值类型会变为 unsigned 类型。

5. 主键

        主键:primary key 用来唯一的约束该字段里面的数据,不能重复,不能为空,一张表最多只能有一个主键(不意味着主键只能添加给一列,一个主键可以被添加到一列或者多列);主键所在的列通常是整数类型。

        如上图所示,在进行表的创建时,指定了 id 添加主键,则会自动将其设为非空且 key 属性设为 PRI。

        如上图所示,当表中有了主键为 1 的数据时,再插入 主键为 1 的数据就会插入失败,所以主键可以用于表示表中一条数据的唯一性。 

        当表创建好但是没有主键的时候,可以添加主键

alter table 表名 add primary key(字段列表);

        注:如果添加主键的那一列有重复的值,则添加主键会失败。 

        删除主键

alter table 表名 drop primary key;

        复合主键

        这里表示 id 和 course_id 合起来为一个主键,如果其中只有一个字段重复,是可以进行插入的。

        上述表表示,同一名学生不能同时选两门相同的课,不同的学生可以选相同的课,同一名学生可以选多门不同的课。 

        复合主键在创建表的时候或者添加时就必须一次指定好哪几列为主键,不能给一列添加主键之后再给另外一列添加主键。

        如上图所示,这时候 id 和 course_id 已经是主键了,将 score 添加主键就会失败。 

6. 自增长

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

        任何一个字段要做自增长,前提是本身是一个索引(key 一栏有值),并且自增长字段必须是整数且一张表最多只能有一个自增长。

        如下图,当进行插入的时候不指定 id,则默认会j将表中已有的最大值 +1 作为新数据该字段的值。 

        如下图所示,表的属性信息中有一个 auto_increment 属性,表示下次再插入数据时,自增长的值为多少。 这个值也可以进行手动的设置。

7. 唯一键

        一张表中往往有很多字段需要唯一性,但是一张表中只能有一个主键,唯一键可以解决表中有多个字段需要唯一性约束的问题。

        唯一键的本质和主键差不多,唯一键允许为空(可以通过对空属性进行设置,使其不允许为空),而且可以允许多条数据为空,空字段不做唯一性比较。

    0 0   上述的 unique 也可以写成 unique key。 

        唯一键和主键的区别:
                主键更多的是标识这一条数据的唯一性。而唯一键更多的是标识某一字段的唯一性。就比如身份证号和邮箱号,一个人的身份证号用于标识这个人的唯一性,而邮箱号表示这个人的邮箱,可以没有,也不能对这个人进行唯一性标识,但是邮箱号是不可以重复的。上述中的身份证号和邮箱号的区别就可以对应看成主键和唯一键的区别。

8. 外键

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

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

        如上图所示,主表为 class,从表为 student。从表中的 class_id 字段受到外键约束。当对 student 表中插入一个 class_id 不属于 主表 class 中 id 列中的数据,则会插入失败。 

        如下图,当前 class 表中有 id 为 1 和 2 的班级,当向 student 中插入数据时,class_id 字段没有在 class 表的 id 中存在,则会插入失败。如下图中插入赵六的数据。

        当 student 表中还存在 班级为 1 的学生时,删除 class 表中 id = 1 这一行数据也是不行的。 

 

android11-修改屏幕显示方向和触摸方向 参数0表示12点钟方向显示参数90表示3点钟方向显示参数180表示6点钟方向显示参数270表示9点钟方向显示。 阅读详情

相关推荐

用VINS-Fusion跑通EuRoC数据集:Ubuntu22.04+ROS2环境下的保姆级评测指南

本文详细介绍了在Ubuntu22.04和ROS2 Humble环境下使用VINS-Fusion处理EuRoC数据集的完整流程。从环境配置、数据集转换到参数调优和性能评估,提供了一套全面的多传感器融合分析方案,帮助开发者在无人机精准定位场景中实现高效部署与优化。

weixin_29212867的博客 517

7、MySQL默认值(DEFAULT)

默认值(Default)的完整称呼是“默认值约束(Default Constraint)”,用来指定某列的默认值。在表中插入一条新记录时,如果没有为某个字段赋值,系统就会自动为这个字段插入默认值。 例如,员工信息表中,部门位置在北京的较多,那么部门位置就可以默认为“北京”,系统就会自动为这个字段赋值为“北京”。 默认值约束通常用在已经设置了非空约束的列,这样能够防止数据表在录入数据时出现错误。 在创建表时设置默认值约束 创建表时可以使用 DEFAULT 关键字设置默认值约束,具体的语法格式如下: &lt

you can you up up up的博客 1万+

10分钟上手YOLOv11:最强姿态估计模型来了,代码开源,效果炸裂!

【10分钟玩转YOLOv11实时姿态估计】🚀 YOLOv11作为YOLO家族最新成员,在速度、精度和易用性上全面升级,尤其适用于姿态估计等复杂视觉任务。本文带您快速掌握: 1️⃣ 核心概念:姿态估计即识别人体17个关键点(如关节部位)并连接成数字骨架,是智能健身、体感游戏等应用的基础。 2️⃣ 技术优势: 超轻量级(最小仅2.9M参数) 极速推理(GPU仅1.7ms) 高精度(COCO mAP@50-95达50%) 3️⃣ 三步实操: ① 安装:pip install ultralytics ② 准备人物

weixin_41246802的博客 1787

T-SQL学习之路之数据库完整性之默认值

默认值(Default)是用户插入记录时向没有指定具体数据的列中自动插入的数据,默认值对象与CREATE TABLE或ALTER TABLE语句操作表时用DEFALUT约束指定的默认值功能相似,两者的区别类似于规则与CHECK约束在使用上的区别。    默认值对象可以用于多个列或用户定义数据类型,表的一列或一个用户定义数据类型只能与一个默认值相绑定。    默认值的创建、查看、绑定、解除和删除

知其所以然 2519

AI代码标注专家Prompt指令的最佳实践

AI代码标注专家 Prompt 可作为项目级别提示词使用,专门负责为 AI 生成的代码添加特定的注释标记,然后基于 Node 脚本可以初步统计出 AI 代码占比。

💻 Code:TypeScript / Engineering 🤖 AI:Prompt Optimization / Context Memory / Coding Agents 615

psasp和matlab,PSASP与Matlab/SimPowerSystems联合仿真接口方法研究

[1]李亚楼,吴中习.Matlab模型接入PSASP暂态稳定计算模块的方法[J].电网技术,2008,32(19):31-36.Li Yalou,Wu Zhongxi.An Approach to Interface Matlab Model with PSASP Transient Stability Module [J].Power System Technology,2008,32(19):...

weixin_39636245的博客 1082

数据库对象(默认值)

定义: 在某个字段未插入数据的情况下,自动为其插入固定值,这个固定值即默认值。 注意: 默认值会在插入数据时未指定该字段内容时生效,若指定该字段插入数据为空值,则默认值设定不会生效 建表时设置默认值的语法: CREATE TABLE TB_NAME ( COL_NAME1 COL_TYPE DEFAULT DEFAULT_VALUE , COL_NAME2 COL_TYPE DEFAULT DEFAULT_VALUE , COL_NAME3 COL_TYPE DEFAULT DEFAULT_VALUE ,

优快云_bilibili的博客 3427

手把手教你逆向分析某里系bx-ua参数(以225版本为例)

本文详细解析了某里系应用bx-ua参数的逆向工程实战方法,重点拆解其三层加密体系(二进制加密、字符替换和Base64编码)。通过工具链配置和实战案例,帮助开发者掌握逆向分析技巧,适用于合法合规的安全研究和加密技术评估场景。

weixin_33220360的博客 412

给数据库表字段设置默认值

一、在数据库表中的操作方法 当表中的字段是varchar字段时可以这样设置: 例如我要设置status(状态这个字段默认为"1"),在创建表的时候sql语句可以这样写 `stats` varchar(1) CHARACTER SET utf8 NOT NULL DEFAULT '1' COMMENT '是否审核(0.已审核,1未审核,2审核不通过)' 在表的表结构中也可以直接设置 二、使用mybatis-plus对参数值的插入和修改做默认值配置 首先定义一个实现类,实现MetaObjectHan

OneMaruko的博客 2万+

【光学仿真】基于Matlab的LG/BG/PV/HG光束生成与特性分析【附完整源码】

本文详细介绍了如何使用Matlab进行拉盖尔-高斯(LG)、贝塞尔-高斯(BG)、完美涡旋(PV)和厄米-高斯(HG)四种特殊光束的仿真与特性分析。通过提供完整的Matlab源码,手把手指导读者生成光束、分析其强度、相位、传播特性及轨道角动量,为光学研究、激光应用及教学提供了直观高效的数值实验平台。

3a9bq4r8t2y的博客 492

IEC 104电力规约详细解读(一) - 报文结构、报文分类、ASDU

比如,双方可以按频率发送,比如接收8帧I帧回答一帧S帧,也可以要求接收1帧I帧就应答1帧S帧,当然也可以不要求(S帧内容示例参考例1)。所以U帧格式的控制欲第一个字节就只有6种情况,分别是0x83(TESTER确认)、0x43(TESTER命令)、0x23(STOPDT确认)、0x13(STOPDT命令)、0x0B(START确认)、0x07(START命令)ASDU(应用服务数据单元),协议原文格式最好去101协议去看看,会比较详细。遥信、遥测、遥控、遥调、总召、对时等都需要使用I格式传送。

张二狗的博客 1万+

MySQL表的约束

MySQL表的约束

m0_74189279的博客 1286

使用R语言获取data.frame中指定列的数据

这里以"df"为例,包含三列数据:“列1”、“列2"和"列3”。通过以上代码,我们成功获取了"列1"和"列3"的数据,并将它们分别存储在了变量"column1"和"column3"中。假设我们有一个名为"df"的data.frame,其中包含了多个列,我们想要提取其中的某一列。符号,我们可以从data.frame中提取出"列2"的数据,并将其赋值给变量"column2"。符号,我们可以轻松提取出data.frame中特定列的数据,并将其存储在变量中供进一步的分析和处理使用。假设我们要获取"列2"的数据。

DevRevolt的博客 2321

【MySQL】表的约束——空属性、默认值、列描述、zerofill、主键、自增长、唯一键、外键

MySQL、表的约束、空属性、默认值、列描述、zerofill、主键、自增长、唯一键、外键

Crocodile1006的博客 2774

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【MySQL】表的约束{ 常见约束 空属性 默认值 列描述comment zerofill 主键 复合主键 自增长 唯一键 外键 }

【MySQL】表的约束{ 常见约束 空属性 默认值 列描述comment zerofill 主键 复合主键 自增长 唯一键 外键 }

Ape's IT Blog 922

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

【mysql】—— 表的约束

mysql 表的约束

m0_56069910的博客 2973

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

[MySQL]MySQL表的约束

详解MySQL表的约束

csdn_myhome的博客 3432

[MySQL] MySQL表的约束

表的约束很多,这里主要介绍如下几个:null/not null、default、comment、zerofill、primary key、auto_increment、unique key、foreign key。在前面的文章中提到了约束,是通过数据类型对字段产生的约束。但是数据类型约束很单一,需要有一些额外的约束,更好的,从业务逻辑角度保证数据的正确性。于是就引入了表的约束。

weixin_67596609的博客 2597

初识MYSQL —— 表的约束

摘要:本文介绍了MySQL中常见的约束类型,包括空属性、默认值、列描述、zerofill填充、主键、自增长、唯一键和外键。重点讲解了主键的唯一性和非空特性,复合主键的使用,以及外键在维护表间数据一致性中的作用。通过实际案例说明了如何设置各类约束,并分析了约束违反时的错误情况,帮助读者理解数据库约束在保证数据完整性方面的重要性。这些约束机制共同确保了数据的合法性和业务逻辑的正确性。

LH__1314的博客 1195

MySQL——表的约束

主键不过是**在`众多事物`当**中选择了一个事物(该事物可能具有唯一性也可能不具有)来成为主键!此时没有被 真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性。比如有一个字段是email,要求是唯一的。 表的约束很多,这里主要介绍如下几个: null/notnull,default,comment,zerofill,primary key, auto_increment,unique key 。 一、空属性 两个值:null(默

weixin_64181464的博客 1964

MySql中表的约束

​ 本篇中将会介绍关于 MySql 数据库中的表的约束,关于表的约束其实约束的是表中的数据类型,因为有的数据类型很单一,需要我们添加一些额外的约束,才能更好的保证数据的合法性,从业务逻辑角度保证数据的正确性,比如QQ号,要求是唯一的。

m0_74830524的博客 933

【MySQL】表的约束

我们可以简单理解成,主键更多的是标识唯一性的。int()括号中默认创建的数字代表数据的范围,有符号位和无符号位,分别用11位和10位来表示,无符号数最大值对应2^32-1,42亿多,对应十位二进制数,所以默认显示为int(10),有符号数由于多一位符号表示位,所以默认为int(11)场景:选课系统,一门课程只能被学生选择一次,一个学生可以选择多门课程,所以需要给这两个字段设置主键,约束了两个不能都同时重复出现,单独重复出现的情况允许,比如一名学生选了多门课,一门课被不同的学生选了。

关注学习C++领域,感谢陪伴,共同进步! 1258

【MySQL篇】表的约束

在MySQL中,表的约束用于强制保证数据的完整性和一致性。在数据库表中,真正约束字段的是数据类型优快云但是数据类型的约束很单一,所以需要一些额外的约束,来保证数据的完整性和正确性。

2401_82677021的博客 1125

06--MySQL表的约束

【摘要】本文介绍了数据库表中常用的约束类型及其应用场景。主要包括:空属性NOT NULL、默认值DEFAULT、列描述COMMENT、补零ZEROFILL等基础约束;重点讲解了主键PRIMARY KEY(单字段/复合主键)、自增长AUTO_INCREMENT的使用方法;详细说明了唯一键UNIQUE KEY和外键FOREIGN KEY的特性与区别,其中外键用于建立表间关联关系。最后通过商店系统案例,综合应用各类约束设计商品、客户、购买三个表的完整结构,涉及主外键设置、非空约束、唯一性约束、默认值等典型业务场景

iuuia的博客 721

【MySQL】--- 表的约束

如果你不插入name列,此时启用默认值NULL,但是由于该列有not null属性,最后就会报错。可以看到每一列后面都可以看到对应的列描述,后续的程序员就知道每一列要插入什么样的数据了。上图中,第一次id = 1,第二次插入另外一条数据时id = 1,此时发生报错,因为主键不允许重复。虽然默认可以为空,但由于一些字段要参与运算,而空无法被计算,所以要尽可能保证不为空。插入6个张三后,发现明明没有指定id,但是id列还是有值,而且自己从1开始增长了。另外的,参照键必须具有唯一性,一般为主键或者唯一键。

weixin_75128035的博客 1192
上一篇: MySQL 中的数据类型 -- 数据类型的分类,数值类型,字符串类型
下一篇: MySQL 表内容的增删查改 -- CRUD操作,聚合函数,group by 子句
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值