开发者社区> 五百万的大西瓜> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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
查询语句;


二、视图的修改

方式一:

语法:

create or 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保存了数据增删改查



版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【Java 基础】Java 数据类型和 MySql 数据类型对应表
【Java 基础】Java 数据类型和 MySql 数据类型对应表MySQL 数据类型对应 Java 数据类型 类型名称 显示长度 数据库类型 JAVA 类型 JDBC 类型索引 (int) 描述 VARCHAR L+N VARCHAR java.lang.String 12 CHAR N CHAR java.lang.String 1 BLOB L+N BLOB java.lang.byte[] -4 TEXT 65535 VARCHAR java.lang.String -1 INTEGER 4 INTEGER UNSIGNED java.lang.Long 4 TINYINT
0 0
MySQL数据库基础
文章主要介绍MySQL数据库中一些常见的操作,为专栏文章,系列介绍
0 0
Mysql数据库连接池的简单实现(基于C++11), 基础学完, 包教包会.
Mysql数据库连接池的简单实现(基于C++11), 基础学完, 包教包会.
0 0
MySQL常用基础 - 小白必看(二)
概念:是一个数据定义语言 该语言部分包括: 1、对数据库的常用操作 2、对表结构的常用操作
0 0
MySQL创建数据表基础篇
MySQL创建数据表基础篇
0 0
MySQL 数据类型基础篇
MySQL 数据类型基础篇
0 0
MySQL创建数据库基础篇
MySQL创建数据库基础篇
0 0
MySQL数据库系列(一)------基础
数据不会随程序结束而消失
0 0
【0基础学习mysql】之DML-表中数据的操作
【0基础学习mysql】之DML-表中数据的操作
0 0
MySQL数据库基础数据入门级[图文详解]
MySQL数据库基础数据入门级[图文详解]
0 0
+关注
五百万的大西瓜
给你五百万,拿去买西瓜~
文章
问答
文章排行榜
最热
最新
相关电子书
更多
让 MySQL 原生分布式触手可及
立即下载
好的 MySQL 兼容可以做到什么程度
立即下载
云数据库RDS MySQL从入门到高阶
立即下载