数据库基础 四张图理解数据库之第二张 快速学习 理解 多表操作(附带相关资源)第二天

本文深入解析数据库中的多表操作,包括一对一、一对多、多对多关系,外键约束,以及truncate table与delete from的区别。重点讨论了主外键约束和事务的四大特性,同时介绍了不同类型的多表查询,如连接查询、外链接查询和子查询。此外,还提到了事务的隔离级别和安全性问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

多表操作

一对多关系:

原则:在从表(多方)创建一个字段,字段作为外键指向主表(一方)的主键。
这里写图片描述

多对多关系:

原则:需要创建第三张表,中间表中至少两个字段,这两个字段分别作为外键指向各自一方的主键。
这里写图片描述

一对一关系:

原则:
外键唯一:主表的主键和从表的外键(唯一),形成主外键关系,外键唯一unique。
外键是主键:主表的主键和外键的主键,形成主外键关系。
提示:实际开发中应用不多,因为一对一可以创建成一张表。

外键约束:

特点:
从表外键的值是对主表主键的引用。
从表外键类型,必须与主表主键类型一致。

1、truncate table 和delete from 区别?

truncate table:

可以清除数据,而且会重置ID,相当于:靶标摧毁了,又重新创建一张一模一样的表格。
属于DDL语句,不可以结合事务。

delete from:

可以清除数据,单不会重置ID。
属于DML,可以结合事务使用。

2、约束的演示(主外键约束)

概述(作用):

约束是用来保证数据的完整性和安全性的。
分类:

单表约束:

主键约束:primary key //自增长:auto_increment
唯一约束:unique
非空约束:not null

多表约束:

主外键约束:
foreign key
格式:
alter table 数据表A add foreign key (列名) reference 数据表B(列名);

总结:外表的外键列不能出现主表没有的主键没有的内容(数据).

多表查询

交叉查询 :格式:select * from 表A,表B; 结果:表的笛卡尔积。笛卡尔积:每张表的总条数乘积。

连接查询:

内连接查询: 语法:inner join 查询结果:表的交集。
显示内连接查询 格式: select * from 表A inner join 表B on 条件;(优化:inner可以省略。)
隐式内连接查询 格式:select * from 表A ,表B where 条件;

外链接查询

左外链接: 左表的全集+表的交集 格式:select * from 表A left outer join 表B on 条件;(优化:outer可省略)
右外链接: 右表的全集+表的交集 格式:select * from 表A right outer join 表B on 条件;

子查询 : 一个SQL语句的查询条件依赖于另一个SQL语句的查询结果。

in: 任意一个,等于
any:任意一个,任何关系
all:所有的,所有条件。

补:distinct 去重

多对多图解:
这里写图片描述

5、事务

概述:指的是逻辑上的一组操作,组成该操作的各个逻辑单元,要么全部成功,要么全部失败。

记忆:

MySQL默认开启了事务的自动提交功能,Oracle没有,需要手动开启。
MySQL的默认隔离级别:repeatable read。
// select @@tx_isolation; 查看隔离级别。
//show variables like ‘%commit%‘ ; 查看是否开启了事务的自动提交功能.
set session transaction isolation level ; 指定的隔离级别。
variables
oracle 的默认隔离界别是: read committed

事务的执行特点;

事务的共有四大特性:
1. 原子性: 事务的不可分割,组成事务的各个逻辑单元不可分割。
2. 一致性:事务执行的前后,数据完整性保持一致。
3. 隔离性:事务执行不应该受到其他事务的干扰。
4. 持久性:事务一旦结束,数据就持久化到数据库中。

补:
如果不考虑隔离性,就有可能引发安全问题:
关于读的问题:
脏读: 一个事务读取到了另一个事务还没有提交的数据。
不可重复读:一个事务读取到了另一个事务已经提交的:修改数据,导致多次查询结果不一致。
虚读(幻读):一个事务读取到了另一事务已经提交的;添加数据,导致多次查询结果不一致。

关于写的问题:
丢失更新。

隔离级别的范文从小到大分别是:
read uncommitted < read committed

多表左外链接查询格式:

SELECT *
FROM 表1
LEFT JOIN 表2
ON 表1.关联字段=表2.关联字段
LEFT JOIN 表3
ON (表1/表2).关联字段=表3.关联字段
WHERE 条件

图图图

这里写图片描述

资源下载链接

在LaTeX中,你可以使用`subfig`包或者`subcaption`包来创建带有个子的浮文。这里是一个基本的例子,假设你有4片分别命名为`figure1.png`, `figure2.png`, `figure3.png`, 和 `figure4.png`,并且有两个子标题`Subsection 1` 和 `Subsection 2`: ```latex \documentclass{article} \usepackage[demo]{graphicx} % 使用 demo 替代真实片路径 \usepackage{subcaption} \begin{document} \section{Section Title} \subsection{Subsection 1} \begin{figure}[htbp] \centering \begin{subfigure}[b]{0.5\textwidth} \includegraphics[width=\linewidth]{figure1.png} \caption{Image 1} \label{fig:sub1} \end{subfigure}% \hfill \begin{subfigure}[b]{0.5\textwidth} \includegraphics[width=\linewidth]{figure2.png} \caption{Image 2} \label{fig:sub2} \end{subfigure} \caption{Images in Subsection 1} \end{figure} \newpage \subsection{Subsection 2} \begin{figure}[htbp] \ContinuedFloat % 如果需要续上一的标签 \centering \begin{subfigure}[b]{0.5\textwidth} \includegraphics[width=\linewidth]{figure3.png} \caption{Image 3} \label{fig:sub3} \end{subfigure}% \hfill \begin{subfigure}[b]{0.5\textwidth} \includegraphics[width=\linewidth]{figure4.png} \caption{Image 4} \label{fig:sub4} \end{subfigure} \caption{Images in Subsection 2} \end{figure} \end{document} ``` 这里的`demo`参数仅作示例,你需要替换为实际的片文件路径。每对子都包含两个子,并使用`\ContinuedFloat`命令在第二部分继续之前的浮动环境。 记得根据实际情况调整片宽度、文字大小等元素。如果你想了解更信息或者遇到问题,可以在提问中具体说明。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值