带你深入了解Java!二十八、事物、视图、索引、备份和恢复!
< 事物、视图、索引、备份和恢复 >
一、掌握MySQL 的事物处理方法
业务:请假、报销、办卡、入学、登陆、注册…一定固定顺序的流程
事物的应用例如:
银行转账: A 转账给 B 500元
1、将A的账户余额扣除500
2、将B 账户余额添加500
-
事物:
一些列操作要么成功!要么都失败!
RDB 安全、事物支持好
NoSQL 事物一般并不太强(Redis是假事物) -
MySQL 存储引擎:
INNSQL(默认使用,高频采用)
BDB 才支持事物
MyISAM 也是常用的存储引擎 但是它在事物等方面不支持,它的查询性能比较强也支持全文索引 -
自动开启事物BEGIN START TRANSACTION(tx)
其实在使用了支持事物的引擎后,事物就已经在使用了!因为SQL中默认自动提交事物!
1、事物的使用:
2、通过关闭自动提交来使用事物 SET autocommit = 0(关闭)| 1 (开启)
DELETE 和 TRUNCATE 区别 DDL会直接结束事物!
未来和Java 、 Python 、JS 等集成使用方方式
JDBC (Java DataBase Connectivity)Java数据库连接技术
二、理解MySQL的ACID原则[面试题]
四大特性:
原子性、一致性、隔离性、持久性
- 1、 原子性
事物是不可分隔的!要么成功要么失败! - 2、一致性
事物执行前和事物执行后数据总量不变! -
3、隔离性
多个事物之间应该彼此独立,不受影响!
事物并发引发的问题可能有:脏读、不可重复读、幻读/虚读
脏读:
一个读取到了另外一个事物未提交的数据!(基本不允许,因为事物可能回滚)
不可重复读:
一个事物在执行期间读取了多次内容,结果部一样,主要针对另一个数据对同样的内容进行了修改操作(UPDATE)
幻读/虚读:
一个事物在执行全表性操作性时,另一个事物进行可插入操作,那么第一个事物就会发现
四大隔离级别:
1、读未提交 任何事物并发问题都无法解决!(基本不采用)
2、读已提交 能解决脏读问题!(Oracle 数据库默认)
3、可重复读 MySQL默认!可以解决脏读和不可重复读问题!(MySQL默认)
4、串行化 最严格的隔离级别!可以解决所有的并发问题!(基本不采用) - 4、持久性
事物在执行完毕之后必须能走将数据永久保存在数据库中!
三、了解视图的使用
- 视图:
它是一种虚拟表,可以用来降低查询复杂的!也可以适用于不同全体数据的不同要求! -
视图的创建:[视图是一张虚拟表,你对它的改动最终影响到真是数据物理表!]
-
删除视图:
-
视图的注意事项:
1、视图仅仅做为查询使用即可!不要进行修改等操作!
2、视图也可以嵌套另一个视图
3、视图的数据是来自于对应的物理表!
四、创建数据库索引的创建
- 索引:
提升查询性能!将一个列或者一组列进行相关组合排序使用。
-
原理:
类似于字典前的目录页 -
索引的分类:
普通索引、唯一索引、主键索引、符合索引、全文索引、空间索引
普通索引:提升查询性能!
唯一索引:除了提升查询性能,还可以保证列/字段值唯一
主键索引:除了提升查询性能,还可以保证主键的特点 非空且唯一
符合索引:可以将多个字段组合提升查询性能
全文索引:它只能在MyISAM存储引擎中使用 提升大数据量情况下对文本查找的性能
全文索引的格式: * 查询内容 studentname 全文索引名称 ‘love’ 查询内容 -
创建添加索引:
-
检验当前SQL的性能:
-
删除索引:
-
删除主键索引:
-
查看索引列表:
索引并不是一味的创建即可提升性能!因为索引也会占用存储空间!而且索引会在操作时进行索引验证
需要谨慎的设计和使用!
-
设计:
【建议】
1、 频繁搜索的的列!
2、 频繁用作于查询选择的列!
3、 经常用于排序分组的列!
4、 经常用于连接的列(主键/外键)!
【不建议】
5、仅包含几个不同值的类!例如: 性别、学历。。。
6、在列表中仅包含几行的列!数据不多的! -
使用:
1、 尽量不要使用 * 来查找数据!
2、 索引应该尽量小,在字节数小的列上建立!
3、 如果where 中有多个条件表达式 那么索引列的条件表达式要放在前面
4、 避免对索引进行计算表达式
五、了解MySQL 数据的备份和恢复
-
1】、备份数据库:
-
2】、参数选择:
mysqldump 查看可选参数 dos -
3】、恢复数据库
(1)、
(2)、
先切换到要恢复数据的数据库
source 数据文件地址; -
4】、单独对字段数据进行备份和恢复操作:
备份:
恢复: