MySQL基础——TCL语言的学习

简介: 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 保存了数据 增删改查



相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
9月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
916 6
|
10月前
|
SQL 关系型数据库 MySQL
Mysql基础学习day01
本课程为MySQL基础学习第一天内容,涵盖MySQL概述、安装、SQL简介及其分类(DDL、DML、DQL、DCL)、数据库操作(查询、创建、使用、删除)及表操作(创建、约束、数据类型)。适合初学者入门学习数据库基本概念和操作方法。
308 6
|
10月前
|
关系型数据库 MySQL 数据管理
Mysql基础学习day03-作业
本内容包含数据库建表语句及多表查询示例,涵盖内连接、外连接、子查询及聚合统计,适用于员工与部门数据管理场景。
183 1
|
10月前
|
SQL 关系型数据库 MySQL
Mysql基础学习day02-作业
本教程介绍了数据库表的创建与管理操作,包括创建员工表、插入测试数据、删除记录、更新数据以及多种查询操作,涵盖了SQL语句的基本使用方法,适合初学者学习数据库操作基础。
199 0
|
10月前
|
SQL 关系型数据库 MySQL
Mysql基础学习day03
本课程为MySQL基础学习第三天内容,主要讲解多表关系与多表查询。内容涵盖物理外键与逻辑外键的区别、一对多、一对一及多对多关系的实现方式,以及内连接、外连接、子查询等多表查询方法,并通过具体案例演示SQL语句的编写与应用。
273 0
|
10月前
|
SQL 关系型数据库 MySQL
Mysql基础学习day01-作业
本教程包含三个数据库表的创建练习:学生表(student)要求具备主键、自增长、非空、默认值及唯一约束;课程表(course)定义主键、非空唯一字段及数值精度限制;员工表(employee)包含自增主键、非空字段、默认值、唯一电话号及日期时间类型字段。每个表的结构设计均附有详细SQL代码示例。
178 0
|
10月前
|
SQL 关系型数据库 MySQL
Mysql基础学习day02
本课程为MySQL基础学习第二天内容,涵盖数据定义语言(DDL)的表查询、修改与删除操作,以及数据操作语言(DML)的增删改查功能。通过具体SQL语句与实例演示,帮助学习者掌握MySQL表结构操作及数据管理技巧。
239 0
|
SQL 存储 关系型数据库
【MySQL基础篇】全面学习总结SQL语法、DataGrip安装教程
本文详细介绍了MySQL中的SQL语法,包括数据定义(DDL)、数据操作(DML)、数据查询(DQL)和数据控制(DCL)四个主要部分。内容涵盖了创建、修改和删除数据库、表以及表字段的操作,以及通过图形化工具DataGrip进行数据库管理和查询。此外,还讲解了数据的增、删、改、查操作,以及查询语句的条件、聚合函数、分组、排序和分页等知识点。
1475 57
【MySQL基础篇】全面学习总结SQL语法、DataGrip安装教程
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
571 4
|
关系型数据库 MySQL Java
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
这篇文章是关于如何使用Django框架配置MySQL数据库,创建模型实例,并自动或手动创建数据库表,以及对这些表进行操作的详细教程。
1031 0
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。

推荐镜像

更多