MySQL基础——TCL语言的学习

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 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 保存了数据 增删改查



相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
分布式计算 关系型数据库 MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
48 3
|
2天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
13 4
|
26天前
|
关系型数据库 MySQL Java
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
这篇文章是关于如何使用Django框架配置MySQL数据库,创建模型实例,并自动或手动创建数据库表,以及对这些表进行操作的详细教程。
59 0
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
|
28天前
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
47 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库
|
28天前
|
Java 关系型数据库 MySQL
springboot学习四:springboot链接mysql数据库,使用JdbcTemplate 操作mysql
这篇文章是关于如何使用Spring Boot框架通过JdbcTemplate操作MySQL数据库的教程。
20 0
springboot学习四:springboot链接mysql数据库,使用JdbcTemplate 操作mysql
|
1月前
|
关系型数据库 MySQL 数据库
mysql关系型数据库的学习
mysql关系型数据库的学习
17 0
|
1月前
|
Kubernetes 关系型数据库 MySQL
k8s学习--利用helm部署应用mysql,加深helm的理解
k8s学习--利用helm部署应用mysql,加深helm的理解
153 0
|
2月前
|
SQL 关系型数据库 MySQL
学习MySQL操作的有效方法
学习MySQL操作的有效方法
43 3
|
2月前
|
SQL 关系型数据库 MySQL
如何学习 MySQL?
如何学习 MySQL?
37 3
|
3月前
|
SQL 关系型数据库 MySQL
下一篇
无影云桌面