IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Mysql学习日记:L22-约束 -> 正文阅读

[大数据]Mysql学习日记:L22-约束

目录

一、约束概述

二、常见的约束

1.1 非空约束:not null

1.2 唯一性约束:unique

1.2.1 两个字段联合唯一

1.3 主键约束:primary key

1.3.1 主键约束的相关术语

1.3.2 什么是主键?有什么用?

1.3.3 主键的特征

1.3.4 如何添加主键约束

1.3.5 复合主键

1.3.6 自然主键和业务主键

1.4 外键约束:foreign key

1.4.1 外键约束的相关术语

1.4.2 外键约束的业务背景

三、not null和unique联合约束


一、约束概述

约束:constraint

在创建表的时候,我们可以给表中的字段添加一些约束,来保证数据的完整性、有效性。

约束的作用就是保证数据有效。

二、常见的约束

1.1 非空约束:not null

not null 约束的字段不能为null

?在以上测试中not null 约束的是name字段,而在第三条数据的插入中并没有name,所以报错。

1.2 唯一性约束:unique

unique约束的字段不能重复但是可以为null

?上图unique约束的字段为name,所以name不能出现重复,所以报错。

1.2.1 两个字段联合唯一

需求:使name和id两个字段联合起来具有唯一性

错误方法:

以上的表示id具有唯一性,name具有唯一性,两者各自唯一。?

正确方法:

?可以重复一个,但不能两个都重复。

约束添加在列后面的,称为列级约束;约束没有添加在列后面的,称为表级约束。

何时使用表级约束?

在需要将多个字段联合起来添加某一个约束时,使用表级约束。

1.3 主键约束:primary key

1.3.1 主键约束的相关术语

主键约束:就是一种约束

主键字段:该字段上添加了主键约束

主键值:主键字段中的每一个值都叫做主键值

1.3.2 什么是主键?有什么用?

?主键值是每一行记录的唯一标识

主键值是每一行记录的身份证号

例如下图name和sex都一样,出现了重名的情况,所以要依靠身份证号来区分

记住:每一个表都应该有主键,没有主键,表无效。

1.3.3 主键的特征

not null + unique(主键值不能是null,同时也不能重复)

1.3.4 如何添加主键约束

?在添加主键约束后,id就不能重复或者为空了

?1.3.5 复合主键

一个字段做主键叫做单一主键,多个字段联合起来做主键,叫做复合主键。

?被联合的字段不能一起重复

注意:①一张表主键约束只能添加一个

②主键值建议使用int bigint char,不建议使用varchar来做主键。主键值一般都是数字,是定长的。

③复合主键用的少,大部分使用单一主键。

1.3.6 自然主键和业务主键

自然主键:主键是一个自然数,和业务没关系。

业务主键:主键值和业务紧密关联,例如拿银行卡账号做主键值,这就是业务主键。

在实际开发中,自然主键使用的比较多,因为主键只要做到不重复就行,不需要有意义。

在mysql中有一个机制,可以自动维护主键值

auto_increment表示自增,从1开始以1递增,自动生成主键

1.4 外键约束:foreign key

1.4.1 外键约束的相关术语

外键约束:一种约束

外键字段:该字段添加上了外键约束

外键值:外键字段当中的每一个值

1.4.2 外键约束的业务背景

再添加了外键约束后,就不能随便写了,必须是来自某张表中的某个字段的数据。

例:请设计数据库,来描述班级和学生的信息

第一种方案:将学生和班级创建在一张表中

no? ? ? ? name? ? ? ? classno? ? ? ? classname

--------------------------------------------------------------------------

1? ? ? ? ?wangwu? ? ? 100? ? ? ? ? ? ? 十一中学高三1班

2? ? ? ? ?lisi? ? ? ? ? ? ? ?100? ? ? ? ? ? ? 十一中学高三1班

3? ? ? ? ?wangwei? ? ?101? ? ? ? ? ? ? 十一中学高三2班

4? ? ? ? ?zhangsan? ? 101? ? ? ? ? ? ? 十一中学高三2班

缺点:数据冗余,空间浪费

第二种:班级一张表,学生一张表?

t_class 班级表

classno(pk)? ? ? ? ? ? ? ? classname

-------------------------------------------------------------

100? ? ? ? ? ? ? ? ? ? ? ? ? ? ??十一中学高三1班

100? ? ? ? ? ? ? ? ? ? ? ? ? ? ??十一中学高三1班

101? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 十一中学高三2班

101? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 十一中学高三2班

t_student 学生表

no(pk)? ? ? ? ? ? ? ? ? ? ? ? name? ? ? ? ? ? ? ? ? ? ? ? cno(fk)(班级编号)

-----------------------------------------------------------

1? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? wangwu? ? ? ? ? ? ? ? ? ? ? ? 100

2? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? lisi? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?100

3? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? wangwei? ? ? ? ? ? ? ? ? ? ? ? 101

4? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? zhangsan? ? ? ? ? ? ? ? ? ? ? 101

当cno字段没有添加任何约束的时候,可能会导致数据无效,可能出现一个102,但是102班级不存在,所以为了保证cno字段都是100和101,需要给cno字段添加外键约束

那么cno字段就是外键字段,cno字段中的每一个值都是外键值.

注意:

t_class是父表,被外键约束引用

t_student是子表,引用的

删除表的顺序:先删子,再删父

创建表的顺序:先创父,再删子

删除数据的顺序:先删子,再删父

插入数据的顺序:先插父,再插子

create table t_student(

no int?primary key auto_increment,

name varchar(255),

cno int,

foreign key(cno) references t_class(classno));

思考1:子表中的外键引用的父表中的某个字段,被引用的这个字段必须是主键吗?

不一定是主键,但必须具有唯一性。

思考2:外键可以为null吗?

外键值可以为null。

检查约束:check(mysql不支持)

三、not null和unique联合约束

可以既非空又唯一

?如果一个字段同时被unique和not null约束的话,该字段自动变成主键字段

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-10-12 23:31:26  更:2021-10-12 23:33:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 1:08:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码