【MySQL】表的束缚

[复制链接]
发表于 2025-11-17 09:54:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

在上一篇的内容中,我们学习了MySQL的数据范例,数据范例本身就是一种束缚。
但是只有数据范例束缚是不敷的。
1. 空属性 null



  • null(默认的)
  • not null
数据库默认字段根本都是字段为空,但是现实开发时,尽大概包管字段不为空,由于数据为空没办法到场运算。

设置了非空束缚后,空值就无法插入进表中

2. 默认值 default

默认值:某一种数据会常常性的出现某个详细的值,可以在一开始就指定好,在必要真实数据的时间,用户可以选择性的利用默认值。
假如用户不指定值,但设置了默认值,则利用默认值; 未设置默认值,MySQL设置默认值为NULL。

在上面的结构中,gender一列我既设置了非空,又设置了默认值,如许故意义吗?
   

  • 假如一列指定了非空束缚

    • 设置了默认值,用户没有明确指定插入的值,则利用default的值,插入乐成;
    • 没有设置默认值,用户未明确指定插入的值,插入失败。

  • null 与默认值二者不辩论,是相互增补的
  • not null 和 defalut一样寻常不必要同时出现,由于default本身有默认值,不会为空
  3. 形貌 comment

列形貌:comment,没有现实寄义,专门用来形貌字段,会根据表创建语句生存,用来给步伐员或数据库管理员来举行相识。
通过desc检察不到表明信息,通过show可以检察到

4. zerofill

在我们属性的范例设置为 int 范例时,编译器会默认给我们有划范围 int(10),背面带数字是什么意思呢?为什么mysql会默认加上?
   

  • int的范围是21亿多,10位数刚好可以表现几十亿。
  • 有符号数,则默认是11位
  一样寻常我们检察时,位数是不会全表现的。若设置了 zerofill,且表现的宽度小于()中指定长度,则利用0添补。

要留意的是,这只是末了表现的效果,在MySQL中现实存储的照旧原来插入的值。补0只是设置了zerofill属性后的一种格式化输出而已

5. 主键、复合主键

主键:primary key用来唯一的束缚该字段内里的数据,不能重复,不能为空,一张表中最多只能有一个主键;主键所在的列通常是整数范例
5.1 主键



  • 主键可以在创建表的时间直接在字段上指定主键
  • 当表创建好以后但是没有主键的时间,可以再次追加主键

  • 建表时指定主键

也可在创建表的末了指定主键


  • 建表后追加主键


  • 删除主键

5.2 复合主键

一张表只能有一个主键,但是不意味着一个表的主键,只能添加给一列。
当主键添加给多列时,就叫做复合主键;
复合主键只要不是全部的列全都辩论,则可以添加乐成。
   举个例子:
弟子选课时,一名弟子可以选则差异的课程,但是每门课程他只能选择一次,此时就可以将学号与课程设置为复合主键,防止辩论。
  在创建表的时间,在全部字段之后,利用primary key(主键字段列表)来创建主键,假如有多个字段作为主键,可以利用复合主键。


6. 自增长 auto_increment

auto_increment:当对应的字段,不给值,会自动的被体系触发,体系会从当前字段中已经有的最大值+1操纵,得到一个新的差异的值。通常和主键搭配利用,作为逻辑主键。
   自增长的特点:
  

  • 任何一个字段要做自增长,条件是本身是一个索引(索引部分再详细讲 )
  • 自增长字段必须是整数 ,默认从1开始,也可以本身设置
  • 一张表最多只能有一个自增长
  

在插入后可通过 last_insert_id() 获取前次插入的 AUTO_INCREMENT 的值(批量插入获取的是第一个值)

7. 唯一键 unique

一张表中有通常有很多字段必要唯一性,数据不能重复,但是一张表中只能有一个主键,唯一键就可以办理表中有多个字段必要唯一性束缚的题目。
唯一键的本质和主键差不多,唯一键允许为空,而且可以多个为空,空字段不做唯一性比力。
   唯一键和主键的区别:
主键更多的是标识唯一性的;而唯一键更多的是包管在业务上,不要和别的信息出现重复(如电话号码,学号,工号等)。
  

8. 外键 foreign key


外键用于界说主表和从表之间的关系:外键束缚告急界说在从表上,主表则必须要有主键束缚或unique束缚。
当界说外键后,要求外键列数据必须在主表的 主键列存在 或 为null。
  1. foreign key (列名) references 主表(列名)
复制代码
必须在全部字段背面指定:



两张表在业务上是有相干性的,但是在业务上没有创建束缚关系,那么就大概出现题目。
创建外键的本质着实就是把相干性交给mysql去稽核了,提前告诉mysql表之间的束缚关系,那么当用户插入不符合业务逻辑的数据的时间,mysql不允许你插入。
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表