查询全局事务隔离级别
#查看全局 show global variables like '%isolation%'; SELECT @@global.tx_isolation;
查询会话事务隔离级别
#查看会话隔离级别1 show session variables like '%isolation%'; #查看会话隔离级别2 SELECT @@session.tx_isolation; #查看会话隔离级别3 SELECT @@tx_isolation;
设置全局事务隔离级别
#设置全局事务隔离级别为Serializable set global transaction isolation level serializable;
设置会话事务隔离级别
#设置会话隔离级别为 read committed set session transaction isolation level read committed;
2.2.4 持久性(Durability)
在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。
- 指不管系统是否发生故障,事务处理的结果都是永久的。
- 一旦事务被提交,事务的效果会被永久地保留在数据库中。
这是可靠数据库所应具备的几个特性。
小结
在事务管理中,原子性是基础,隔离性是手段,一致性是目的,持久性是结果。
2.3 事务控制语句
BEGIN 或 START TRANSACTION:显式地开启一个事务。
COMMIT 或 COMMIT WORK:提交事务,并使已对数据库进行的所有修改变为永久性的。
ROLLBACK 或 ROLLBACK WORK:回滚会结束用户的事务,并
撤销正在进行的所有未提交的修改。
SAVEPOINT S1:使用 SAVEPOINT 允许在事务中创建一个回滚点,
一个事务中可以有多个 SAVEPOINT;“S1”代表回滚点名称。
ROLLBACK TO [SAVEPOINT] S1:把事务回滚到标记点。
2.3.1 测试begin和commit(开始事务和提交事务)
#开始事务 begin 将tong的存款 -1000 updata stub set money=money-1000 where name='tong'; #查询 select * from stub; 此时进行commit提交 数据发生了改变
2.3.2 测试事务未提交的回滚
2.3.3 测试创建回滚点并进行回滚
2.4 使用 set 设置控制事务
#禁止自动提交(状态为OFF) SET AUTOCOMMIT=0; #开启自动提交,Mysql默认为1(状态为ON) SET AUTOCOMMIT=1; #查看Mysql中的AUTOCOMMIT值 show variables like 'autocommit';
注意:
如果没有开启自动提交,当前会话连接的mysql的所有操作都会当成一个事务直到你输入rollback|commit;当前事务才算结束。当前事务结束前新的mysql连接时无法读取到任何当前会话的操作结果。
如果开起了自动提交,mysql会把每个sql语句当成一个事务,然后自动的commit。
当然无论开启与否,begin; commit|rollback; 都是独立的事务。
三、MySQL存储引擎
3.1 MyISAM 表支持的3 种不同的存储格式
3.1.1 静态(固定长度)表
静态表是默认的存储格式。静态表中的字段都是非可变字段,这样每个记录都是固定长度的,这种存储方式的优点是存储非常迅速,容易缓存,出现故障容易恢复;缺点是占用的空间通常比动态表多。
3.1.2 动态表
动态表包含可变字段,记录不是固定长度的,这样存储的优点是占用空间较少,但是频繁的更新、删除记录会产生碎片,需要定期执行 OPTIMIZE TABLE 语句或 myisamchk -r 命令来改善性能,并且出现故障的时候恢复相对比较困难。
3.1.3 压缩表
压缩表由 myisamchk 工具创建,占据非常小的空间,因为每条记录都是被单独压缩的,所以只有非常小的访问开支。
3.2 控制语句
1)查看系统支持的存储引擎
#查看系统支持的存储引擎 show engines;
2)查看表使用的存储引擎
方法一:
#查看表使用的引擎 show table status from 库名 where name='表名'\G;
方法二:
use 库名; show create table 表名;
3)修改存储引擎
1. 通过 alter table 修改
#进入数据库 use 库名; #修改引擎为MyISAM alter table 表名 engine=MyISAM;
2. 通过修改 /etc/my.cnf 配置文件,指定默认存储引擎并重启服务
#修改配置文件 vim /etc/my.cnf ...... [mysqld] ...... #修改此行为 INNODB default-storage-engine=INNODB #重启服务 systemctl restart mysqld
注意:此方法只对修改了配置文件并重启mysql服务后新创建的表有效,已经存在的表不会有变更。
1.通过 create table 创建表时指定存储引擎
use 库名; #创建表的时候指定数据库 create table 表名(字段1 数据类型,...) engine=MyISAM;