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

【MySQL】表的约束

目录

      • 概念
      • 1. 空属性
      • 2. 默认值
      • 3. 列描述
      • 4. zerofill
      • 5. 主键
      • 6. 自增长
      • 7. 唯一键
      • 8. 外键

概念

表的约束保证插入的数据是合法的, 符合预期的;
真正约束字段的是数据类型, 但关于单一, 所以需要一些额外的约束, 满足不同的场景;

1. 空属性

  • MySQL 中, 空属性有两个值, null 和 not null;

  • 与 C/C++ 中的空值不同, MySQL 中的空值无法参与运算;

  • 数据库默认字段基本都是可为空, 但实际使用中, 尽可能保证字段不为空;

例:

创建一个可为空的字段和不可为空的字段;
在这里插入图片描述

向其插入数据, 不可为空的字段中是不能插入空值的;
在这里插入图片描述

2. 默认值

  • MySQL 中, 字段的默认值 默认为空值;
  • 当字段不可为空时, 若默认值为空值, 那么需要显示插入数据;

例:

新增字段 num3 , 默认值为 3;
在这里插入图片描述

向表中插入数据时, 不可为空且默认值为空的字段是不能被忽略的;
在这里插入图片描述

3. 列描述

  • comment, 列描述, 没有实际的含义, 专门用来描述字段, 类似注释, 会根据表创建语句保存;

例:

desc 是不显示列描述信息的, 会在表创建的详细信息中显示;
在这里插入图片描述

4. zerofill

  • zerofill 零填充, 若当前值的宽度小于该字段定义时的宽度(包括符号位), 会将自动填充前导零, 使其与定义中指定的显示宽度相匹配, 类似一种格式化输出;

例:

新增字段 num4, 设置 zerofill 约束, 需要注意, 使用 zerofill 会默认添加无符号属性;
而 int(10) 中的 (10) 表示的是前导零填充至的位数, 与类型的存储大小无关;
在这里插入图片描述

将 num4 的前导零长度减少, 方便观察, 然后向表中插入数据;
在这里插入图片描述

5. 主键

  • primary key 主键, 是用来约束唯一数据的;
  • 主键不能重复, 不能为空, 一张表中只能有一个主键, 通常是整数类型;

例:

新增字段 num5, 设置为主键;
在这里插入图片描述

向表中插入数据, 主键的数据是不能重复, 为空的;
在这里插入图片描述

可以指定删除表的主键

ALTER TABLE table_name DROP PRIMARY KEY;

在这里插入图片描述

也可以为已经插入数据的表创建主键, 但只有字值不为空且不重复的字段才能被设置为主键;

ALTER TABLE table_name ADD PRIMARY KEY(column)

在这里插入图片描述

6. 自增长

  • auto_increment 自增长, 设置自增长的字段, 若插入数据时未显示设置, 会被系统自动触发, 将当前字段中已有的最大值, 进行 +1 操作, 设置; 通常和主键配合使用, 作为逻辑主键;
  • 自增长字段类型必须为整型, 并且本身必须为一个索引, 一张表最多只能有一个自增长字段;

例:

修改字段 num5 , 设置主键和自增长属性;
在这里插入图片描述

向表中插入数据, auto_increment 会根据在该字段中记录的最大值进行操作;
在这里插入图片描述

7. 唯一键

  • unique 唯一键, 是多个字段用来约束唯一性的;
  • 和主键不同, 唯一键可以存在多个, 并且允许为空, 但空字段不做唯一性比较, 主键和唯一键不冲突, 相互补充;
  • 每个唯一键字段都不允许出现重复的值 ;

例:

修改 num1, num2, num3, num4 字段, 添加唯一键;
在这里插入图片描述

向表中插入数据, 每个字段新插入的数据都不能与当前字段存在的值重复;
在这里插入图片描述

8. 外键

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

例:

为 t1 表的 num5 字段插入数据, 并创建 t2 表, 建立从属关系, 设置 num5 为主键字段, num6 为外键字段;
在这里插入图片描述

向 t2 表中插入数据, 只能插入主键字段中存在的值;
在这里插入图片描述

也可以使用语句创建,

ALTER TABLE 从表名 ADD CONSTRAINT 约束名 FOREIGN KEY (外键字段) REFERENCES 主表名(主键字段);

删除外键;

ALTER TABLE 从表名 ADD CONSTRAINT 约束名 FOREIGN KEY (外键字段) REFERENCES 主表名(主键字段) ON DELETE CASCADE;

相关文章:

  • 腾讯开源人像照片生成视频模型V-Express
  • 240520Scala笔记
  • MySQL之查询性能优化(十)
  • 19.删除链表的倒数第N个结点
  • 如何利用exceljs将data数据导出表格实现日期去重,同时保留对应日期的每一列数据
  • 【C++ | 拷贝构造函数】一文了解C++的 拷贝(复制)构造函数
  • 【Linux】进程(8):Linux真正是如何调度的
  • Gradio.NET:一个快速制作演示demo网页的利器
  • 鸿蒙开发接口数据管理:【@ohos.data.preferences (首选项)】
  • 在Windows中使用svn的命令行
  • 【ARFoundation自学04】AR Tracked Image 图像追踪识别
  • 基于安卓的虫害识别软件设计--(1)模型训练与可视化
  • 关于安装typescript后运行tsc -v命令报错问题
  • idm2024最新完美破解版免费下载 idm绿色直装版注册机免费分享 idm永久激活码工具
  • HTML5 视频 Vedio 标签详解
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • [nginx文档翻译系列] 控制nginx
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • ECS应用管理最佳实践
  • ES6系列(二)变量的解构赋值
  • Git 使用集
  • MaxCompute访问TableStore(OTS) 数据
  • python 装饰器(一)
  • SpingCloudBus整合RabbitMQ
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • Java总结 - String - 这篇请使劲喷我
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • ​一些不规范的GTID使用场景
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (6)设计一个TimeMap
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (Ruby)Ubuntu12.04安装Rails环境
  • (十三)Maven插件解析运行机制
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • .gitignore文件---让git自动忽略指定文件
  • .mysql secret在哪_MYSQL基本操作(上)
  • .net core 控制台应用程序读取配置文件app.config
  • .NET 解决重复提交问题
  • .net 怎么循环得到数组里的值_关于js数组
  • .net6+aspose.words导出word并转pdf
  • .net之微信企业号开发(一) 所使用的环境与工具以及准备工作
  • .考试倒计时43天!来提分啦!
  • @Not - Empty-Null-Blank
  • [ solr入门 ] - 利用solrJ进行检索
  • [100天算法】-实现 strStr()(day 52)
  • [4.9福建四校联考]
  • [Android]将私钥(.pk8)和公钥证书(.pem/.crt)合并成一个PKCS#12格式的密钥库文件
  • [BZOJ1877][SDOI2009]晨跑[最大流+费用流]
  • [ccc3.0][数字钥匙] UWB配置和使用(二)
  • [CUDA手搓]从零开始用C++ CUDA搭建一个卷积神经网络(LeNet),了解神经网络各个层背后算法原理