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

MySQL的约束

目录

MySQL表的约束

空属性NULL

默认值default

zerofill

主键primary key

复合主键

自增长auto_increment

唯一键

外键与外键约束

综合案例


MySQL表的约束

基本概念:通过数据类型对字段进行约束比较单一,需要额外的约束从而确保数据的合法性

空属性NULL

值:NULL(默认)和NOT NULL

基本概念:数据库默认字段基本都是字段为空,但是实际开发时,要尽可能保证字段不为空,因为数据为空就无法参与运算

默认值default

值:default 值

基本概念: 某一种数据会经常性的出现某个具体的值,那么就可以在一开始就设定好,如果用户没有指定数据,就会使用该默认值

注意事项:INSERT INTO 语句中的字段数量和后面 VALUES 中提供的值的数量必须匹配

  • 没有默认值且字段不能为空时,必须要为字段插入数据
  • 没有默认值但字段能为空时,可以不为字段插入数据
  • 有默认值时,可以不为字段插入数据

zerofill

基本概念:用于设置数字的等宽,常用于设计统一样式的编号等场景,与int(数字)配合使用

主键primary key

基本概念:用于唯一标识表中每一行数据的字段或字段组合。​主键确保了数据的唯一性和完整性,每个表只能有一个主键

特点:

  • 唯一性:​主键值必须唯一,不能重复
  • 非空性​主键值不能为空,不能为NULL
  • 单一性​一个表只能有一个主键
  • 索引功能:​MySQL 会自动为主键创建索引,以提高查询效率

为已存在的表中添加主键:alter table 表名 add primary key (字段名); 

删除主键:alter table 表名 drop primary key;

复合主键

语法:primary key(字段名)

自增长auto_increment

基本概念:通常和主键搭配使用,管理表中的唯一标识符,不需要每次都手动指定主键值,且可以自定义新的增长起始值

特点:

  • 任何一个字段要做自增长的前提是该字段本身是一个索引(key一栏有值)
  • 自增长字段的数据类型必须是整数
  • 一张表最多只能有一个自增长

使用last_insert_id()函数获取最后插入记录的自增长值:

自定义新的自增起始值:alter table 表名 auto_increment  = 数字;

唯一键

基本概念:一个表中只能有一个主键但可以有多个唯一键,用于增强约束力,唯一键保证列中的值是唯一的,但是可以为 NULL。不同于主键,唯一键允许 NULL 值,并且每个 NULL 值在字段中是允许重复的(主键保证表中我们设定的每一行的编号id都是唯一的,唯一键保证每一列中所有的数据都是唯一的)

外键与外键约束

基本概念:一种用于 维护表之间关系 的约束。它定义了一个表中的字段(或字段组合)作为另一个表的 主键 或 唯一键 的引用,用于实现表与表之间的关联关系。外键的作用是确保数据的 完整性 和 一致性,通过约束保证数据库中不同表之间的数据关系正确,不会出现无效或不一致的数据

语法:foreign key (子表的字段名) references 主表(要与子表字段名建立联系的字段名)

  • 父表和子表:谁建立的外键谁就是子表
  • 外键字段: 子表中指向父表主键或唯一键的字段
  • 引用关系: 子表的外键字段值必须与父表的主键或唯一键值一致,或者为 NULL

注意事项:在定义外键约束时,主表和子表的字段的数据类型必须完全一致,包括是否使用 unsigned属性

综合案例

有一个商店的数据,记录客户及购物情况,由以下三个表组成:

  • 商品goods(商品编号goods_id,商品名goods_name,单价unitprice,商品类别category,供应商provider)
  • 客户customer(客户号customer_id,姓名name,住址address,邮箱email,性别sex,身份证card_id)
  • 购买purchase(购买订单号order_id,客户号customer_id,商品号goods_id,购买数量nums)

~over~ 

相关文章:

  • 学习笔记12——并发编程之线程之间协作方式
  • rust语言match模式匹配涉及转移所有权Error Case
  • Java本地方法根据线上地址下载图片到本地然后返回本地可以访问的地址
  • 【氮化镓】开态GaN HEMTs中氧诱导Vth漂移的缺陷演化
  • 力扣:找到一个数字的 K 美丽值(C++)
  • 面试题之强缓存协商缓存
  • javascript-es6 (六)
  • 从机器学习到生成式AI狂潮:AWS的AI征程从未停息
  • 【实战ES】实战 Elasticsearch:快速上手与深度实践-7.2.2自动扩缩容策略(基于HPA)
  • 2025年总结zabbix手动部署过程!
  • 【Python爬虫】使用python脚本拉取网页指定小说章节
  • [250310] Mistral 发布世界领先的文档理解 API:Mistral OCR | 谷歌利用 AI 保护自然的三种新方式
  • 可视化图解算法:反转链表
  • 《面向长尾分布的甲骨文识别算法设计与实现 》开题报告
  • 力扣hot100二刷——哈希、双指针、滑动窗口
  • C/C++中使用CopyFile、CopyFileEx原理、用法、区别及分别在哪些场景使用
  • 【gcc编译以及Makefile与GDB调试】
  • python LLM工具包
  • JavaScript数据类型和内存空间
  • 20-智慧社区物业管理平台
  • 新任重庆市垫江县委副书记刘振已任县政府党组书记
  • 张巍任中共河南省委副书记
  • 网易有道一季度净利润同比增长247%:有能力在今年实现更强劲的利润增长
  • 美联储主席:供应冲击或更频繁,将重新评估货币政策方法中的通胀和就业因素
  • 中国青年报:为见义勇为者安排补考,体现了教育的本质目标
  • 因存在安全隐患,福特公司召回约27.4万辆SUV