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数据库(三) -> 正文阅读

[大数据]带你了解MySQL数据库(三)

一、约束条件之主键

Primary Key 主键

  1. 单子从约束角度来看主键等于非空且唯一 not null unique
	create table t1(id int primary key, name varchar(32));

在这里插入图片描述

  1. InnoDB存储引擎规定一张表必须有一个主键且只有一个主键
    如果创建的表中没有主键也没有非空且唯一的字段 那么InnoDB存储引擎会自动采用一个隐藏的字段作为主键
    (逐渐主要适用于来加快数据查询相当于一本书的目录)
  2. 如果创建的表中没有主键但是有非空且唯一的字段 那么InnoDB存储引擎会自动将该字段设置为主键
    在这里插入图片描述
	补充知识
		id int primary key 		# 单列主键
		sid int
		nid int primary key(sid,nid) # 联合主键 也属于单列主键比较冷门

4. auto_increment 自增
该约束条件不能单独使用 必须要跟在键后面(主要配合主键一起使用)

	create table t3(id int auto_increment); 	# 需要配合主键一起使用

在这里插入图片描述

	create table t3(id int primary key auto_increment, name varchar(32);

在这里插入图片描述

我们发现auto_increment有自增的特点 但是自增的操作不会因为删除数据完之后而重置从1开始

在这里插入图片描述

但是如果非要重置主键 需要格式化表 Truncate 表名; # 删除表数据并重置主键值

在这里插入图片描述

二、约束条件之外键(一对多)

前戏(一张员工表格)
在这里插入图片描述

		上述表述的缺陷
			1.表结构不清晰 到底是员工表还是部门表(说都是都不过分)
		   	2.字段数据反复存取 浪费存储空间(新增数据 数据一样)
		    3.表的扩展性极差 想修改一个数据表格全部改变复嘈杂
		优化操作
			1.拆表将员工分为一个表 部门分一个表
			2.但是拆完不知道谁是那个部门的了
			3.解决方案创建一个部门编号填写部门数据的主键值
		
		外键字段专门用于记录表于表之间的关系	

在这里插入图片描述

		外键字段主要是用来记录表于表之之间数据的关系 而数据的关系有四种
		一对多关系	多对多关系	一对一关系	没有关系
		如何判多表数据之间的关系判定呢?(换位思考)
		1.先站在员工表角度
			一名员工数据能否对应多条数据部门
				不行
		2.再站部门表角度
			一个部门能否拥有多个员工
				可以
		完成关系判定之后得出结果 一个可以一个不可以 那么关系就是一对多
		针对一对多的关系 外键字段键在多的一方(没有多对一 统称为一对多)
	1.先写普通字段
	2.然后在写外键字段

	create table user_txt(id int primary key auto_increment,
						  name varchar(32),
						  gender enum('male','female','others') default 'male',
						  dep_id int,
						  foreign key(dep_id) references dep_txt(id));
	create table dep_txt(id int primary key auto_increment,
						 position varchar(32),
						 target varchar(32));	
						 

在这里插入图片描述

创建表的时候需要先创建被关联的表(没有外键) 然后再是关联表(有外键)否则报错

在这里插入图片描述

插入表数据的时候 针对外键字段只能填写被关联表字段已经出现过的数据值

在这里插入图片描述

被关联字段无法修改和删除 有点不太好 操作限制性太强

在这里插入图片描述
这个时候我们就需要用到新的功能 级联更新、级联删除(被关联的数据一旦变动 关联的数据同步变动)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在实际工作中 很多时候可能并不会使用外键 因为外键增加了表之间的耦合度 不便于单独操作 资源消耗增加
我们为了能够描述出表数据的关系 又不想使用外键 自己通过写SQL 建立代码层面的关系

三、表关系之多对多

		以书籍表和作者表为例
		1.一本书的作者可以对应多个作者吗?
			可以
		2.一个作者可以队友多本数据吗?
			可以
		两边都可以 那么表数据关系就是 多对多(针对多对多关系 外键字段不能建在任意一表)
	1.先写普通字段
	2.然后在写外键字段
		create table book(id int primary key auto_increment,
			           	title varchar(32),
			            author_id int,
			            foreign key(author_id) references author(id) 
			            on update cascade  # 级联更新 
			            on delete cascade  # 级联删除);
       create table author(id int primary key auto_increment,	
			            name varchar(32),
			            book_id int,
			            foreign key(book_id) references book(id) 
			            on update cascade  # 级联更新 
			            on delete cascade  # 级联删除);

在这里插入图片描述

       但是发现两个数据在互相谦让 都没有创建成功 所以多对多不能在原表修改
       需要使用到固定套路 需要单独开设第三张关系表 多个关系也不能全部放在一个ID表格里面了
       所以数据表格也变成一行一行的

在这里插入图片描述

	需要单独开设出第三张关系表 存储数据关系
		 create table book(
		      	id int primary key auto_increment,
		        title varchar(32));
	     create table author(
	     		id int primary key auto_increment,
	         	name varchar(32));
	  	 create table book2author(
		      	id int primary key auto_increment,
		        book_id int,
		        foreign key(book_id) references book(id) 
		        on update cascade  # 级联更新 
		        on delete cascade, # 级联删除
		        author_id int,
		        foreign key(author_id) references author(id) 
		        on update cascade  # 级联更新 
		        on delete cascade  # 级联删除);

在这里插入图片描述

四、表关系之一对一

	以用户表和用户详情表为例
	1.一个用户可以拥有多个信息不?
	2.一个信息可以指定多个用户不
	两边答案都不可以 那么先考虑是不是没有关系 如果有关系那么肯定是一对一
	针对一对一的表关系 外键字段建在任何一张表都可以
	(但是建议建在查询频率较高的表中便于后续查询)

在这里插入图片描述

		create table user(id int primary key auto_increment,
					       name varchar(32)
					       detail_id int unique,	# unique 唯一
					       foreign key(detail_id) references userDetail(id) 
					       on update cascade  # 级联更新 
					       on delete cascade  # 级联删除);
		create table userDetail(id int primary key auto_increment,
					       phone bigint);
		'''与多对一不一样的就是多一个 unique唯一约束条件  使用过就不能再次使用'''

在这里插入图片描述

技术小白记录学习过程,有错误或不解的地方请指出,如果这篇文章对你有所帮助请点点赞收藏+关注 谢谢支持 !!!

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-08-19 19:12:48  更:2022-08-19 19:16:38 
 
开发: 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/23 11:06:55-

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