MySQL的约束

目录

MySQL表的约束

空属性NULL

默认值default

zerofill

[主键primary key](#主键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~

相关推荐
保卫大狮兄1 小时前
设备管理从台账到报废,完整生命周期一次讲清
数据库·设备管理·设备
数据安全技术观察1 小时前
数据动态脱敏:让脱敏策略跟着数据目录走
大数据·网络·数据库
小席是个热心肠2 小时前
Redis的自我学习
数据库·redis·学习
2601_965798472 小时前
Salient Theme Setup Guide for Fast Creative WordPress Sites
数据库·web3·php·wordpress
@Mike@3 小时前
09-数据库学习笔记(数据库索引与过滤器)
数据库·笔记
程序员夏洛4 小时前
MySQL 中 count(*)、count(1) 和 count(字段名) 有什么区别?
数据库·mysql
Wang's Blog4 小时前
PostgreSQL笔记34:索引优化策略全景解析——从B-tree到HOT的核心原理与实践
数据库·笔记·postgresql
l1258655 小时前
# RAG向量数据库优化实战:HNSW索引调参与生产级性能设计
数据库·python·mysql·langchain
梦Arrebol5 小时前
Mysql内容及相关实验
数据库·mysql
OceanWaves19935 小时前
mysql 8.0.32 磁盘爆满,清理从库日志
数据库·mysql