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

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. 复合主键两个合起来是唯一的

http://www.xdnf.cn/news/2461.html

相关文章:

  • 第一个 servlet请求
  • 【看穿操控的套路】
  • 【记录maven依赖规则-dependencyManagement,dependencies】
  • Matlab 报错:尝试将 SCRIPT vl_sift 作为函数执行:
  • Java学习手册:Spring 框架核心概念
  • 如何通过OKR管理项目目标
  • 四 YARN配置和HBase配置
  • C++ 区分关键字和标识符
  • 职场提效小工具!
  • 【halcon】tuple_sort_index 和 select_obj 配合使用 详解
  • 小白学习python第四天
  • SpringBoot常用注解解析汇总
  • 基础学习:(9)vit -- vision transformer 和其变体调研
  • 03 基于 STM32 的温度控制系统
  • vscode eslint与vue-official冲突,导致点击的时候鼠标不会变成手型,一直在加载,但是不转到相应方法。
  • 二进制补码:给补码求原码
  • vue3中ref在js中为什么需要.value才能获取/修改值?
  • 智能文档抽取技术发展前沿与应用
  • Linux Socket编程:从API到实战
  • 模型删除层后重建
  • Go语言入门:目录与链接
  • EKS环境下服务重启50X错误
  • 企业架构之旅(1):TOGAF 基础入门
  • 【Arxiv 2025】Single Image Iterative Subject-driven Generation and Editing
  • 小黑享受思考心流: 73. 矩阵置零
  • 《全球反空间能力》报告翻译——部分1
  • CISA、项目管理、信息系统项目等等电子书资料
  • ComfyUI for Windwos与 Stable Diffusion WebUI 模型共享修复
  • LeetCode热题100--438.找到字符串中所有字母异位词--中等
  • ISIS的由于L1产生的一系列问题