MySQL基础——TCL语言的学习

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: TCL语言的相关学习!

TCL语言的学习

transaction control language 事务控制语言


事务

一个或一组SQL语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行。

事务由单独单元的一个或多个SQL语句组成,在这个单元中,每个MySQL语句是相互依赖的。而整个单独单元作为一个不可分割的整体,如果单元中某条SQL语句一旦执行失败或产生错误,整个单元将会回滚。所有受到影响的数据将返回到事物开始以前的状态;如果单元中的所有SQL语句均执行成功,则事物被顺利执行。


 存储引擎:

1、概念:在MySQL中的数据用各种不同的技术存储在文件(或内存)中。

2、通过show engines:来查看MySQL支持的存储引擎。

3、在MySQL中用的最多的存储引擎有:innodb,myisam,memory等。其中innodb支持事务,而myisam,memory等不支持事务。


事务的ACID属性:

1、原子性:一个事务不可再分割,要么执行,要么都不执行

2、一致性:一个事务执行会使数据从一个一致状态切换到另一个一致状态

3、隔离性:一个事务的执行不受其他事务的干扰

4、持久性:一个事务一旦提交,则会永久的改变数据库的数据


事务的创建

隐式事务:事务没有明显的开启和结束的标记。如insert、update、delete语句

显式事务:事务有明显的开启和结束的标记。前提:必须先设置自动提交功能为禁用


使用显示事务:

步骤1:开启事务

set autocommit=0;

start transaction;可选的

步骤2:编写事务中的SQL语句

select insert / update / delete

语句1;

语句2;

……

设置回滚点:savepoint 回滚点名;

步骤3:结束事务

commit;提交事务

rollback;回滚事务

回滚到指定的地方:rollback to 回滚点名;


并发事务

1、事务的并发问题是如何发生的?

多个事务 同时 操作 同一个数据库的相同数据时

2、并发问题都有哪些?

脏读:一个事务读取了其他事务还没有提交的数据,只是读到其他事务“更新”的数据

不可重复读:一个事务多次读取,结果不一样

幻读:一个事务读取了其他事务还没有提交的数据,只是读到其他事务“插入”的数据

对于同时运行的多个事务,当这些事务访问数据库中相同的数据时,如果没有采取必要的隔离机制,就会导致各种并发问题:

(1)脏读:对于两个事务T1,T2,T1读取了已经被T2更新但还没有被提交的字段,之后,若T2回滚,T1读取的内容就是临时且无效的。

(2)不可重复读:对于两个事务T1,T2,T1读取了一个字段,然后T2更新了该字段,之后,T1再次读取同一个字段,值就不同了。

(3)幻读:对于两个事务T1,T2,T1从一个表中读取了一个字段,然后T2在该表中插入了一些新的行,之后,如果T1再次读取同一个表,就会多出几行。

数据库事务的隔离性:数据库系统必须具有隔离并发运行各个事务的能力,使他们不会相互影响,避免各种并发问题。

一个事务与其他事务隔离的程度称为隔离级别,数据库规定了多种事务隔离级别,不同隔离级别对应不同的干扰程度,隔离级别越高,数据一致性就越好,但并发性越弱。

3、如何解决并发问题?

通过设置隔离级别来解决并发问题

4、事务的隔离级别:


脏读 不可重复读 幻读
read uncommitted
read committed ×
repeatable read × ×
serializable × × ×


MySQL中默认第三个隔离级别repeatable read

Oracle中默认第二个隔离级别read committed


查看隔离级别

select @@tx_isolation;


设置隔离级别

set session|global transaction isolation level 隔离级别;


数据库提供的4种事务隔离级别:

隔离级别

描述

READ UNCOMMITTED(读未提交数据)

允许事务读取未被其他事务提交的变更、脏读、不可重复读和幻读的问题都会出现。

READ COMMITED(读已提交数据)

只允许事务读取已经被其他事务提交的变更,可以避免脏读,但不可重复读和幻读问题仍然可能出现。

REPEATELE READ(可重复读)

确保事务可以多次从一个字段中读取相同的值,在这个事务持续期间,禁止其他事务对这个字段进行更新,可以避免脏读和不可重复读,但幻读的问题仍然存在。

SWRIALIZABLE(串行化)

确保事务可以从一个表中读取相同的行,在这个事务持续期间,禁止其他事务对该表执行插入,更新和删除操作,所有并发问题都可以避免,但性能十分低下。

每启动一个MySQL程序,就会获得一个单独的数据库连接,每个数据库连接都有一个全局变量@@tx_isolation,表示当前的事务隔离级别。

查看当前的隔离级别:SELECT@@tx_isolation。

设置当前MySQL连接的隔离级别:

set transaction isolation level read committed

设置数据库系统的全局的隔离级别:

set global transaction isolation level read committed


视图

含义:

虚拟表,和普通表一样使用


MySQL51版本出现的新特性,是通过表动态生成的数据

比如:舞蹈班和普通版的对比

视图:一种虚拟存在的表,行和列的数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的,只保存了SQL逻辑,不保存查询结果。

应用场景:

多个地方用到同样的查询结果

该查询结果使用的SQL语句较复杂


视图的优点:

1、简化SQL语句

2、提高了SQL的重用性

3、保护基表的数据,提高了安全性


一、创建视图

语法:

create view 视图名
as查询语句;


二、视图的修改

方式一:

语法:

createor replace view 视图名
as查询语句;


方式二:

语法:

alter view 视图名
as查询语句;


三、删除视图

语法:

drop view 视图名,视图名,……;


四、查看视图

desc 视图名;
show create view 视图名;


五、视图的更新

具备以下特点的视图不允许更新:

1、包含以下关键字的SQL语句:分组函数、distinct、group by、having、union或union all

2、常量视图

3、select中包含子查询

4、join

5、from一个不能更新的视图

6、where子句的子查询引用了from子句中的表


视图PK表:


创建语法的关键字 是否实际占用物理空间


视图 create view 只是保存了SQL逻辑 增删改查,一般不能增删改
create table 保存了数据 增删改查



相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
存储 关系型数据库 MySQL
|
1月前
|
SQL 存储 关系型数据库
【MySQL 数据库】11、学习 MySQL 中的【锁】
【MySQL 数据库】11、学习 MySQL 中的【锁】
76 0
|
存储 关系型数据库 MySQL
|
1月前
|
SQL 关系型数据库 MySQL
【MySQL 数据库】4、MySQL 事务学习
【MySQL 数据库】4、MySQL 事务学习
44 0
|
11天前
|
SQL 存储 关系型数据库
6本值得推荐的MySQL学习书籍
本文是关于MySQL学习书籍的推荐,作者在DotNetGuide技术社区和微信公众号收到读者请求后,精选了6本值得阅读的MySQL书籍,包括《SQL学习指南(第3版)》、《MySQL是怎样使用的:快速入门MySQL》、《MySQL是怎样运行的:从根儿上理解MySQL》、《深入浅出MySQL:数据库开发、优化与管理维护(第3版)》以及《高性能MySQL(第4版)》和《MySQL技术内幕InnoDB存储引擎(第2版)》。此外,还有12本免费书籍的赠送活动,涵盖《SQL学习指南》、《MySQL是怎样使用的》等,赠书活动有效期至2024年4月9日。
|
16天前
|
SQL 关系型数据库 MySQL
轻松入门MySQL:深入学习数据库表管理,创建、修改、约束、建议与性能优化(3)
轻松入门MySQL:深入学习数据库表管理,创建、修改、约束、建议与性能优化(3)
|
4天前
|
SQL 关系型数据库 MySQL
DQL语言之基础查询(mysql)
DQL语言之基础查询(mysql)
|
4天前
|
SQL 关系型数据库 MySQL
DQL语言之常见函数(mysql)
DQL语言之常见函数(mysql)
|
4天前
|
SQL 关系型数据库 MySQL
DQL语言之连接查询(mysql)
DQL语言之连接查询(mysql)
|
存储 SQL 关系型数据库