MySQL表的约束

约束

表的约束:表一定要有各种约束,通过约束,让我们未来插入数据库表中的数据是符合预期的。

约束本质是通过技术手段,倒逼程序员插入正确的数据,凡是插入进来的数据都是符合数据约束的!

约束的最终目标:保证数据的完整性和可预期性

所以我们需要很多的约束条件

空属性

NULL,表示什么都没有,与' '不同,' '表示是空的,NULL表示什么都没有

两个值:null(默认的) 和 not null(不为空)

数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空,因为数据为空无法参与运算

设置为not null 不能插入null或不插入

默认值

用一种数据会经常性的出现的某个具体的值,可以一开始就指定好,用户可以选择性的使用默契值

尝试插入,一个设置名字,年龄,性别一个只设置名字

not null 与default一起使用呢??

他们两个并不冲突互相补充

not null:约束 当用户插入的时候

default:约束 当用户忽略这一列的时候,使用默认值(如果设置了),没设置,直接报错。

如果建表时没有设定default值

可以看到 mysql 默认设置了 DEFAULT NULL

如果设置了 not null 就不会默认设置 default null

列描述

列描述:comment,没有实际含义,专门用来描述字段,会根据表创建语句保存,用来给程序员或DBA来进行了解。

zerofill

设置了zerofill 如果设置数值的位数不够那就往前补0

查找依然能找到

更改补0的位数 int(x)-->补x位(浮点数也可以设置)

位数够了就不补0了

主键

主键 primary key:用来唯一的约束该字段里面的数据,不能重复不能为空,一张表中最多有一个主键。但是并不代表一个表中的主键只能添加给一列!一个主键可以被添加到一列或者多列上(复合主键)。

主键所在的列通常是整数类型。

主键自动设置为不允许为空

主键不允许重复、冲突

方便通过查找主键精准查找

删除主键操作

alter table 表名 drop primary key

添加主键操作

alter table 表明 add primary key(列名)

但是添加为主键的那一列不能有重复

删除重复的列后即可添加成功

复合主键 -->多个字段作为主键

id 与 course_id 合起来算一个主键

这两个数据都不一样

这两个数据有一个和历史数据不一样

不可以两个数据都一样

自增长

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

自增长的特点:

  1. 任何一个字段要做自增长,前提是本身是一个索引(key一栏有值)

  2. 自增长字段必须是整数

  3. 一张表最多只能有一个自增长

插入时可以不用主动插入自增长

我们发现主键根据上一个插入的主键进行了自增长

因为auto_inrement在表内建立了约束在表外也是可以设置的

如下所示

可以选择之前没使用过的值,但是自增从最大的开始自增

list_insert_id 获取上次插入后的auto_increment 的值

唯一键

一张表中往往很多字段需要唯一性,数据不能重复,但是一张表中只能有一个主键:唯一键就可以解决表中有多个字段需要唯一性约束的问题。

唯一键的本质和主键差不多,唯一键允许为null ,而且可以多个为null,null字段不做唯一性比较。

可以简单理解成,主键更多的是标识唯一性的。而唯一键更多的是保证在业务上,不要和别的信息 出现重复 例如身份证号和员工号,身份证设置为主键,但是员工号也不能重复,就需要一个约束,此时就可以将员工号设置为唯一键。

sql 复制代码
unique key

unique
都可设置

使用实例

sql 复制代码
在定义列时直接指定
CREATE TABLE users (
    id INT PRIMARY KEY,
    email VARCHAR(100) UNIQUE,           -- 使用 UNIQUE
    phone VARCHAR(20) UNIQUE KEY,        -- 使用 UNIQUE KEY
    username VARCHAR(50)
);

在所有列定义后指定
CREATE TABLE users (
    id INT PRIMARY KEY,
    email VARCHAR(100),
    phone VARCHAR(20),
    username VARCHAR(50),
    UNIQUE (email),                     
    UNIQUE KEY (phone),                  
);

唯一键有了就不能重复插入

可以插入null值(主键不能为null)

外键

外键用于定义主表和从表之间的关系:外键约束主要定义在从表上,主表则必须是有主键约束

创建两张表

插入数据后分别为

此时就有问题

  1. 没有三班这个班级

  2. 如果把班级表1班删除了,其实也是不合理的,还有一般的学生

我们上面的 学生表的 class_id班级id 与 教室表的 id班级id是有关联的但是没有约束

所以我们要创建外键约束

外键用于定义主表和从表之间的关系:外键约束主要定义在从表上,主表则必须是有主键约束或unique约束 。当定义外键后,要求外键列数据必须在主表的主键列存在或为null

sql 复制代码
foreign key (字段名) references 主表(列)

删除上面学生表重新创建一个

插入数据实验

发现不能插入不存在的班级,也不能插入重复的学生id


这篇就到这里啦(づ ̄3 ̄)づ╭❤~

相关推荐
鼠爷ねずみ2 小时前
SpringCloud前后端整体开发流程-以及技术总结文章实时更新中
java·数据库·后端·spring·spring cloud
九皇叔叔2 小时前
MySQL 数据库 Read View 详解
数据库·mysql·mvcc·read view
Elastic 中国社区官方博客3 小时前
Elasticsearch:圣诞晚餐 BBQ - 图像识别
大数据·数据库·elasticsearch·搜索引擎·ai·全文检索
cui_win4 小时前
Prometheus实战教程 - Redis 监控
数据库·redis·prometheus
JIngJaneIL4 小时前
基于java + vue个人博客系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot
TG:@yunlaoda360 云老大4 小时前
华为云国际站代理商备份策略设置过程中遇到问题如何解决?
服务器·数据库·华为云
SelectDB4 小时前
Doris Catalog 已上线!性能提升 200x,全面优于 JDBC Catalog,跨集群查询迈入高性能分析时代
数据库·数据分析·apache
TAEHENGV5 小时前
进度跟踪模块 Cordova 与 OpenHarmony 混合开发实战
android·javascript·数据库
神秘面具男035 小时前
MySQL 从基础到实践
数据库·mysql