一 存储引擎:
1.介绍
1>在数据库管理系统当中通过使用数据引擎来实现数据的增删改,查询
2>不同的存储引擎提供的有不同的存储机制,索引技巧等功能 MYSQL的核心,就是存储引擎
3>同样的,用户也可以根据自己的需要进行选择,更改自己需要的存储引擎
4>可以使用show engines 来查询当前所有的存储引擎
2.分类介绍:
1>先简单介绍存储引擎最常用的: MYLSAM InnoDB Memory
2>全部存储引擎介绍:
3.操作:
-- 1.查看当前的默认存储引擎
show variables like '%storage_engine%';
在MYSQL5.5之前,是以MYLSAM作为默认的存储引擎的
在5.5之后,默认引擎变成了InnoDB
-- 2.查看具体的某个表所使用的引擎(看显示结果当中engine后面显示的,就是存储引擎)
show create table tablename;
-- 3.创建某个新表时设置存储引擎
create table(....) engine=enginenamn;
-- 4.修改某个已经存在的表的存储引擎
alter table tablename engine=enginename;
二 事务:
1.介绍:
事务是通过存储引擎实现的,而且目前来看,对于MYSQL仅仅只有InnoDBc才能够支持事务的使用
2.作用:
1>事务能够用来保证数据库的完整性,保证大量的SQL语句的执行,要么全部执行,要么全部不执行!
2>事务用来对于DDL,DML,DCL进行操作,比如插入,修改,删除等操作,并且默认都是自动提交的!
3.操作:
事务操作主要有以下几个
1.打开事务 Start Transaction
任何一条的DML操作的执行,都标志着事务的开始
-- 可以使用.begin.作为开始语句
2.提交事务(所有语句全部正常执行) Commit Transaction
成功的结束,会将所有的DML操作历史记录跟底层硬盘进行一次同步
3.回滚事务(语句执行不完全) Rollback Transaction
结束失败,将所有的DML历史操作清空
但是需要注意的一点是,再平常的使用当中,系统会自动将每一条的DML看作是一个事务,自动的提交,但是在有多个语句的事务当中,应当是全部完成之后成功了,才会进行提交!所以需要我们手动的关闭自动提交的指令
set autocommit=0; 禁止自动提交
set autocommit=1; 开始自动提交
create database transaction_1;
use transaction_1;
create table acount(
id int primary key,
name VARCHAR(20),
money double
);
insert into acount VALUES(1,'张三',1000);
insert into acount VALUES(2,'李四',2000);
将1账户的钱转给2账户,使用事务的方式
set autocommit=0;
-- 查看状态
select @@autocommit;
begin;
update acount set money= money-200 where name='张三';
update acount set money= money+200 where name='李四';
-- 提交事务
commit;
-- 回滚事务
rollback;
end;
4.事务的特性:
1.原子性:
其实就是整体性,必须将事务当中的所有语句当作是一个整体,不可分割,事务开始后的所有操作,要么全部执行,要么全部都不会执行
2.一致性:
也就是事务执行前后的状态必须要保持一致!
3.隔离性:
在一些比较大的工程当中,有许多的事务,为了避免一些错误的产生,就需要对这些事务进行隔离处理
4.持久性:
事务在提交之前,都可以通过回滚的方式而不让数据落地!但是一但提交,是无法再回滚的,是永久性的!
5 事务的隔离级别:
1.介绍:
当多个事务对一个表进行操作的时候,为了避免几个事务同时对于表进行修改从而产生错误.使得最后的结果没有达到预期.因此就需要使用事务隔离 I
2.分类:
主要是四类,并且从上到下,其事务与事务之间的关联就越小,影响程度就越小
TIPS:mysql的默认隔离级别是第三种!
自然,不同的隔离级别,也会产生不一样的问题
3.隔离级别相关操作:
查看隔离级别
show variables like '%isolation%';
-- 设置隔离级别(从上往下的关系程度越来越小,联系越小)
set session transaction isolation level read unconmmitted;
set session transaction isolation level read conmmitted;
set session transaction isolation level repeatable read;
set session transaction isolation level SERIALIZABLE;
4.对于各个级别问题的概述*
set session transaction isolation level read unconmmitted;
-- 脏读,举一个简单的例子,上班组小王在月末发现银行卡里'获得'了工资,10000元,但是之后老板发现发错了,在小王快要消费的时候进行了rollback,实际上的数据并没有从磁盘当中进行复制读取,在提交之前,小王的账户就多了前,这就是脏读!也就是发生在数据还没有完全提交的时候
set session transaction isolation level read conmmitted;
-- 这种级别会产生不可重复读:指的是对于A事务来说,在B事务执行过DML的一些语句之后,B事务提交之前,跟B事务提交之后,A读取出来的数据是不一样的,不是重复的,因此被称作不可重复读
set session transaction isolation level repeatable read;
-- 这种隔离级别会产生可重复读,相对于不可重复度,可重复读,无论在B事务提交前还是后,A读取的值是一样的,但是也有问题,A提交前后的值不一样,有不可重复读的存在!
set session transaction isolation level SERIALIZABLE;
-- 没有事务之间的问题,因为这种的隔离方式将所有的事务单独区分开了,一个事务只能够看着另外一个事务做完事情之后才能够进行,因此其效率比较的低下
OVER!感谢观看