MySQL事务

事务是mysql执行的最小单元

MySQL事务

1、在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。

2、事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。

3、事务用来管理 insert,update,delete 语句。

 

事务命令

mysql> start transaction;#手动开启事务

mysql> insert into t_user(name) values('pp');

mysql> commit/rollback;

 

事务的特征

1、原子性

2、一致性

3、隔离性

4、持久性

 

MySQL的事务隔离级别

1、读未提交:read uncommitted

2、读已提交:read committed

3、可重复读:repeatable read

4、串行化:serializable

1、脏读:当前事务(A) 中可以读到其他事务(B)未提交的数据(脏数据)

时间顺序

转账事务

取款事务

1

开始事务

2

开始事务

3

查询账户余额为 2000 元

4

取款 1000 元,余额被更改为 1000

元(未提交)

5

查询账户余额为 1000 元(产生脏数据)

6

取款操作发生未知错误,事务回滚,

余额变更为 2000 元

7

转入 2000 元,余额被更改为 3000 元

(脏读 1000+2000)

8

提交事务

备注

按照正常逻辑此时账户应该为 4000 元

2、不可重复读:在事务A中先后两次读取同一个数据,两次读取的结果不一样(脏读与不可重复读的区别在于:前者读到的是其他事务未提交的数据,后者读到的是其他事务已提交的数据)。

时间顺序

事务 A

事务 B

1

开始事务

开始事务

2

第一次查询,小明的年龄为 20 岁

3

开始事务

4

其他操作

5

更改小明的年龄为 30 岁

6

提交事务

7

第二次查询, 小明的年龄为 30

备注

按照正常逻辑,事务 A 前后两次读取到的数据应该一致

3、幻读:在事务A 中按照某个条件先后两次查询数据库,两次查询结果的条数不同(不可重复读与幻读的区别可以通俗的理解为:前者是数据变了,后者是数据的行数变了)

时间顺序

事务 A

事务 B

1

开始事务

开始事务

2

第一次查询,数据总量为 100 条

3

开始事务

4

其他操作

5

新增 100 条数据

6

提交事务

7

第二次查询, 数据总量为 200 条,

新增的数据为幻读

备注

按照正常逻辑,事务 A 前后两次读取到的数据总量应该一致

MySQL备份与恢复

备份

mysqldump -h主机名 -P端口 -u用户名 -p密码 [-R] 数据库名 > 文件名.sql

mysqldump -uroot -p123456 -R lingsheng >/home/milo/lingsheng.dump -R备份存储过程,不加不备份存储过程

 

拷贝到其他计算机

scp -P22 root@192.168.2.107:/home/milo/lingsheng.dump /home/dump

 

恢复

mysql -h主机名 -P端口 -u用户名 -p密码 数据库名 < 文件名.sql

mysql -uroot -p123456 lingsheng < /home/milo/lingsheng.dump

 

MySQL分库分表

分库

第一种:磁盘读IO瓶颈,热点数据太多,数据库缓存放不下,每次查询时会产生大量的IO,降低查询速度 -> 分库

和垂直分表。

第二种:网络IO瓶颈,请求的数据太多,网络带宽不够 -> 分库。

 

垂直分表

以 字段为依据,按照字段的活跃性,将 表中字段拆到不同的 表(主表和扩展表)中。

 

水平分表

以 字段为依据 ,按照一定策略(hash、range等),将一个 表中的数据拆分到多个 表中。

 

MySql优化(优化效果递减)

1、SQL语句及索引的优化

2、数据库表结构的优化

3、系统配置的优化

4、硬件的优化

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值