MySQL高级用法入门

多表攻略

所有多表操作都可以简单理解为,把多个表联系成一个表,最终思想成面上当成一个表对待

准备

实际情况多表查询,表与表之间都要有关联的,现在只是做个测试。
MySQL高级用法入门_第1张图片

INNER JOIN

INNER JOIN 两个表整合(表1 m 条数据,表二 n 条数据,总计 m*n 条数据),如果有条件删选合并查找。

select * from test1 inner join test2; // 后续可以加on where group by子语句 

MySQL高级用法入门_第2张图片

LEFT JOIN 与 RIGHT JOIN

外链接包括LEFT JOIN 与 RIGHT JOIN ,可以简单理解为 LEFT JOIN会包含左侧所有表记录,RIGHT JOIN 会包含右侧表全部记录。

LEFT JOIN 关键字从左表返回所有的行,即使右表中没有匹配。如果右表中没有匹配,则结果为 NULL。

RIGHT JOIN 关键字从右表返回所有的行,即使左表中没有匹配。如果左表中没有匹配,则结果为 NULL。

MySQL高级用法入门_第3张图片

UNION

SQL UNION 操作符合并两个或多个 SELECT 语句的结果。

union all 会把所有的全都找出来(包括重复的)union去重。
MySQL高级用法入门_第4张图片

事务

MySQL 事务主要用于处理操作量大,复杂度高的数据。
比如你同事问你借100大洋,你会少100,你同事多100。这两个事件都要发生完整,缺一不可。它们就构成了一个事务。

  • 只有使用了 Innodb 数据库引擎的数据库或表才支持事务;
  • 事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行;
  • 事务用来管理 insert,update,delete 语句。

MYSQL 事务处理主要有两种方法:

1、用 BEGIN, ROLLBACK, COMMIT来实现

  • BEGIN 开始一个事务(或者 start transaction)
  • ROLLBACK 事务回滚(事件有一失败)
  • COMMIT 事务确认(事件都成功)

2、直接用 SET 来改变 MySQL 的自动提交模式:

  • SET AUTOCOMMIT=0 禁止自动提交
  • SET AUTOCOMMIT=1 开启自动提交(M ysql的提交默认是自动提交)

事务隔离

并发问题
  • 脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据;
  • 不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果不一致;
  • 幻读:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样。

ps: 不可重复读的和幻读很容易混淆,不可重复读侧重于修改,幻读侧重于新增或删除。

隔离级别
事务隔离级别 脏读 不可重复读 幻读 说明
读未提交(read-uncommitted) 最低的事务隔离级别,一个事务还没提交时,它做的变更就能被别的事务看到
不可重复读(read-committed) 保证一个事物提交后才能被另外一个事务读取。另外一个事务不能读取该事物未提交的数据。
可重复读(repeatable-read) 多次读取同一范围的数据会返回第一次查询的快照,即使其他事务对该数据做了更新修改。事务在执行期间看到的数据前后必须是一致的。
串行化(serializable) 事务 100% 隔离,可避免脏读、不可重复读、幻读的发生。花费最高代价但最可靠的事务隔离级别。
set session transaction isolation level read UNCOMMITTED;

你可能感兴趣的:(MySQL)