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

MySQL 表的约束(一)

文章目录

  • 表的约束
    • 空属性
    • 默认值
    • 列描述
    • zerofill
    • 主键
    • 总结

表的约束

1. 为什么要有表的约束?
因为要保证数据的完整性和可约束性,合法性

空属性

  1. 两个值:null(默认的)和not null(不为空)
  2. 数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空,因为数据为空没办法参与运算。
  3. not null 是不允许插入的是空值
  • 案例
create table myclass(
class_name varchar(20) not null,
class_room varchar(20) not null,
other varchar(20)
);
insert into myclass (class_name,class_room,other) values('高三3班','101教室','普通班');
// 默认的是可以为空的
insert into myclass (class_name,class_room) values('高三3班','101教室');
// 该句是错误的, 是不允许插入的是空值,约束
insert into myclass (class_name,class_room) values('高三3班',null);

在这里插入图片描述

默认值

  1. 默认值:一开始就设定好的值,如果用户不输入值,就使用默认设定的值,如果用户输入了值,就使用用户输入的值
create table t13(
name varchar(20) not null,
age tinyint unsigned default 18,
gender char(1) default '男'
);
insert into t13 (name,age,gender) values('张三',19,'女');
insert into t13 (name) values('李四');

在这里插入图片描述
2. 如果既设置了not null 又设置了default,不显示写列名是可以的,默认插入的就是default值

在这里插入图片描述
在这里插入图片描述
3. not null 和 default 的使用
在这里插入图片描述
4. 如果显示地设置为了 not null,mysql是不会给你自动加上default的

在这里插入图片描述

列描述

  1. 列描述:comment,没有实际含义,专门用来描述字段,会根据表创建语句保存,用来给程序员或DBA来进行了解。
  2. 列描述就像我们写的注释一样
create table t15(
name varchar(20) not null comment '这个是用户的姓名',
age tinyint unsigned default 18 comment '这个是用户的年龄',
gender char(1) default 18 comment '这个是用户的性别'
);

在这里插入图片描述

zerofill

  1. zerofill是用于进行宽度的填充的,如果少于给定的宽度,那么会在该数字的前面加上0,比如int(10),10再加上zerofill就表示填充宽度是10

在这里插入图片描述
2. 修改约束,将列b的属性修改为int(1) unsigned zerofill

在这里插入图片描述
3. zerofill 如果宽度足够就按照你写的原样写出,如果不够宽度填充0,下图的填充宽度为4
在这里插入图片描述

4. zerofill 默认的无符号整数是 2 ^ 32 - 1,是10位,有符号整数是 -2 ^ 31 ~ 2 ^ 31 - 1,是11位

在这里插入图片描述

主键

  1. 主键:primary key用来唯一的约束该字段里面的数据,不能重复,不能为空一张表中最多只能有一个主键;主键所在的列通常是整数类型。
// 对id进行主键约束
create table test_key(
id int unsigned primary key comment '学号不能为空',
name varchar(20) not null
);
  • 案例

PRI表示这个列属性是主键

在这里插入图片描述
在这里插入图片描述

2. 主键冲突,相同的key不允许插入

在这里插入图片描述
3. 根据主键的唯一性可以修改对应的列属性

在这里插入图片描述
4. 去掉该表中的主键

alter table test_key drop primary key;

在这里插入图片描述
5. 建好表之后添加主键

alter table test_key add primary key(id);
// 删除名字为孙权的列
delete from 表名 where name='孙权';

6. 复合主键:不意味着一个表中的主键,只能添加给一列,一个主键可以被添加到一列或者多列上

// 规定一个学生只能选择一门课程
// id和course_id合起来不重复
// 也就是同一个人可以选择多门课程,一个课程可以被多个人选择
// 但是一个人不能选择两次同一门课程
create table t18(
id int unsigned,
course_id int unsigned comment '课程编号',
score tinyint unsigned comment '这个学生改门课程考的分数',
primary key(id,course_id)
);

在这里插入图片描述

7. 不能插入id和course_id都相同的主键

在这里插入图片描述

总结

1. 主键是用来衡量一行一行表中的信息是唯一的,主键是唯一的
2. 复合主键两个合起来是唯一的

相关文章:

  • DeepSeek 多头潜在注意力(Multi-Head Latent Attention, MLA)技术
  • Linux——线程(2)线程互斥(锁)
  • Qt网络数据解析方法总结
  • HNUST湖南科技大学-嵌入式考试选择题题库(109道纠正详解版)
  • 【进程控制】
  • PAT第七题素数对猜想
  • (超级详细)发明专利撰写
  • 码蹄集——输入、输出格式题
  • ACL访问控制列表简单实验CISCO
  • Android 理清 Gradle、AGP、Groovy 和构建文件之间的关系
  • Java高频面试之并发编程-09
  • Gentex EDI 需求分析
  • 投资控股集团类网站建设公司有哪些:打造专业形象与高效沟通的桥梁
  • 【wpf】Treeview控件的另类展示效果
  • Spdlog 日志组件的安装及使用
  • Linux:进程间通信->共享内存
  • 封装el-autocomplete,接口调用
  • 蓝桥杯 11. 打印大X
  • 手搓传染病模型(SEIR)
  • 2025年AEJ SCI2区:增强麻雀搜索算法CERL-SSA+工业物联网感知通信,深度解析+性能实测
  • 第二艘国产大型邮轮实现坞内起浮,重点强化邮轮供应链本土化建设
  • 央行副行长:研究建立民营中小企业增信制度,破解民营中小企业信用不足等融资制约
  • 央媒关注给保洁人员设休息室:让每一份踏实奋斗得到尊重呵护
  • 在差异中建共鸣,《20世纪美国文学思想研究》丛书出版
  • 四川邻水县县长石国平拟任县(市、区)党委书记
  • 四川苍溪县教育局通报“工作人员辱骂举报学生”:停职检查