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