N days explosive liver database - MySQL (4)

This article mainly summarizes and learns knowledge about multi-table queries, transactions and architecture.

期待和大家一起学习进步。

insert image description here

scalar subqueries

 子查询返回的结果是单个值(数字、字符串、日期等),最简单的形式,这种
 	子查询称标量子查询。
 常用的操作符:=、<>、>、>=、<、<=

column query

列子查询返回的结果是一列(可以是多行),这种子查询称为列子查询

insert image description here

常用的操作符:
	IN		在指定的集合范围之内,多选一
	NOT IN	不在指定的集合范围之内
	ANY		子查询返回列表中,有任意一个满足即可
	SOMEANY等同,使用SOME的地方都可以使用ANY
	ALL		子查询返回列表的所有值都必须满足

row subquery

子查询返回的结果是一行(可以是多列),这种子查询称为行子查询。
 常用的操作符:=、<>、IN、NOT、IN

insert image description here

table subquery

子查询返回的结果是多行多列,这种子查询称为表子查询
常用操作符:IN

Multi-table query summary

Multi-table relationship:

一对一:用于表结构拆分,在其中任何一方设置外键(UNIQUE),关联另一方
	   的主键
多对多:建立中间表,中间表包含两个外键,关联两张表的主键
一对多:在多的一方设置外键,关联一的一方的主键

Multi-table query:

Inner join:

隐式:SELECT 字段列表 FROM 表1,表2 WHERE 条件...;
显示:SELECT 字段列表 FROM 表1[INNER]JOIN表2 ON连接条件...;

insert image description here

Outer join:

左外:SELECT 字段列表 FROM 表1 LEFT [OUTER]JOIN表2 ON条件...;
右外:SELECT 字段列表 FROM 表1 RIGHT [OUTER]JOIN表2 ON条件...;

Self join:

SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON条件...;

subquery:

标量子查询、列子查询、行子查询、表子查询

affairs

Introduction

事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作
为一个整体一起向系统提交或撤销操作请求,即这些操作要么同
时成功,要么同时失败。
默认MySQL的事务是自动提交的,也就是说,当执行一条DML语句,MySQL会立即
隐式的提交事务。

transaction operation

查看/设置事务提交方式
SELECT @@autocomment;
SET @@autocomment = 0;

commit transaction

 COMMENT;

rollback transaction

 ROLLBACK;

open transaction

START TRANSACTION或BEGIN;

Four characteristics of transactions (ACID)

原子性:事务是不可分割的最小分割单元,要么全部成功,要么全部失败。
一致性:事务完成时,必须使所有的数据都保持一致状态。
隔离性:数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立
		环境下运行。
持久性:事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。

concurrent transaction problem

脏读 :一个事务读到另外一个事务还没有提交的数据。
不可重复读:一个事务先后读取一条记录,但两次读取的数据不同,称之为不可
		重复读。
幻读:一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,
又发现		  这行数据已经存在,好像出现了“幻影”。

insert image description here

Compared

transaction isolation level dirty read non-repeatable read Phantom reading
Read uncommitted read uncommitted
Read committed Read committed ×
Repeatable Read (default) repeatable read × ×
Serializable serialization × × ×

View transaction isolation level

SELLECT @@TRANSACTION_ISOLATION;

Set transaction isolation level

SET[SESSION|GLOBAL] TRANSACTION ISOLATION LEVEL[READ UNCOMMITTED | READ 	
COMMITTED | REPEATABLE READ | SERIAUZABLE] 

Summarize

Business Profile

事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作
为一个

transaction operation

	START TRANSACTION或BEGIN;--开启事务
COMMENT;/ROLLBACK;--提交事务/回滚事务

Four characteristics of transactions (ACID)

	原子性、一致性、隔离性、持久性

concurrent transaction problem

脏读、不可重复读、幻读

transaction isolation level

READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ、SERIAUZABLE

MySQL architecture: connection layer, service layer, engine layer, storage layer

connection layer

最上层是一些客户端和链接服务,主要完成一些类似于连接处理、授权认证、
及相关的安全方案。服务器也会为安全接入的每个客户端验证它所具有的操作
权限。

service layer

第二层架构主要完成大多数的核心服务功能,如SQL接口,并完成缓存的查询,
SQl的分析和优化,部分内置函数的执行。所有跨存储引擎的功能也在这一层
实现,如,过程,函数等。

Engine layer
The storage engine is really responsible for the storage and extraction of data in MySQL, and the server communicates with the storage engine through the API. Different storage engines have different functions, so we can choose the appropriate storage engine according to our needs.

storage layer

主要将数据存储在文件系统之上,并完成与存储引擎的交互。
Introduction to Storage Engines
存储引擎就是存储数据、建立所以、更新/查询数据等技术的实现方式。存储引
	擎是基于表的,而不是基于库的,所以存储引擎也可被称为表类型。
在创建表时,指定存储引擎
CREATE TABLE 表名(
字段1 字段1类型[COMMENT 字段1注释],
...
字段n 字段n类型[COMMENT 字段n注释]
)ENGINE=INNODB[COMMENT 表注释];
View the storage engines supported by the current database
SHOW ENGINES;

insert image description here

Storage Engine Features
InnoDB
 介绍
InnoDB是一种兼顾高可靠性的通用存储引擎,在MySQL5.5之后,InnoDB默认的
	MySQL存储引擎。
特点
 	DML操作遵循ACID模型,支持事务;
	行级锁,提高并发访问性能;
	支持外键FOREIGN KEY约束,保证数据的完整性和正确性;
文件
xxx.ibd: xxx代表的是表名,innoDB引擎大每张表都会对应这样一个表空间文
	件,存储该表的表结构(frm、sdi)、数据和索引。
参数:innodb_file_per_table
MyISAM
介绍
	MyISAM是MySQL早期的默认存储引擎。
特点
	不支持事务,不支持外键
	支持表锁,不支持行锁
	访问速度块
文件
xxx.sdi:存储表结构信息
xxx.MYD:存储数据
xxx.MYI:存储索引
Memory
介绍
Memory引擎的表数据是存储在内存中,由于收到硬件问题、或断点问题的影响,
	只能将这些表作为临时表或缓存使用。
特点
	内存存放
	hash索引(默认)
文件
xxx.sdi:存储表结构信息
storage engine options
在选项存储引擎时,应该根据应用系统的特点选择合适的存储引擎。对于复杂的
	应用系统,后还可以根据实际情况选择多种存储引擎进行组合。
*InnoDB:是Mysql默认存储引擎,支持事务、外键。如果应用对于事务的完整性
	有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查
	询之外,还包含很多的更新、删除操作,那么InnoDB存储引擎是比较
	合适的选择。
*MyISAM:如果应用是一读操作和插入操作为主,只有很少的更新和删除操作,
 	并且对事务的完整性、并发性要求不是很高,那么选择这个存储引擎是非常
 	合适的。
*MEMORY:将所有数据保存在内存中,访问速度快,通常用于临时表及缓存。
	MEMORY的缺陷是对表的大小有限制,太大的表无法缓存在内存中而且无法
	保障数据的安全性。

Guess you like

Origin blog.csdn.net/weixin_74888502/article/details/131715544