1.掌握MySQL的事务处理方法 [重要]
业务:(一套固定的顺序流程. 注册,转账,等等)
事务:一系列操作要么都成功,要么都失败!
RDB安全,事务支出好 Nosql事务一般不强(Redis是假事务)
MySQL:存储引擎 INNODB(默认, 高频采用), BDB支持事务
MyISAM 也是常用引擎 但事务方面不支持 查询性能强 支持全文索引.
在使用了支持事务的引擎后,事务就已经在使用了,因为在MySQ中默认自动提交事务!
事务的使用
(1)
开启自行提交事务 BRGIN start transaction
没有异常直接,提交事务 commit
如果出现异常,回滚数据 rollback
(2)
通过关闭自动提交事务 set autocommit = 0(关闭)\1(开启)
Delect和truncate的区别
truncate是DDL,会隐式提交,所以,不能回滚,不会触发触发器。DDL语句会直接结束事务.
DELETE语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作。
2.理解MySQL的ACID原则
“A” 原子性: 不可再分割 要么都成功要么都失败!
“C” 一致性: 事务执行前和事务执行后数据总量不变!
“I” 隔离性: 多个事务之间因该彼此独立不受影响.
事务并发引发的问题可能有: 脏读.不可重复读.幻读\虚读
脏读: 事务读取到另一个事务未提交的数据(基本不允许,事务可能回滚)
不可重复的: 一个事务在执行期间读取了多次内容,结果不一样。主要针对另一个事务对同样的内容进行了修改操作.
幻读/虚读(部分情况下可出现): 一个事务在执行全表性的事务时,另一个事务进行了插入操作,那么第一个事务就会发现还有未执行的内容.
(MySQL)四大隔离级别: 读未提交\读已提交\可重复读\串行化
读未提交: 任何事务并发问题都无法解决(基本不采用).
读已提交: 能解决脏读问题(Oracle数据库默认).
可重复读: MySQL默认! 可以解决脏读和不可重复读问题.
串行化: 最严格的隔离级别 可以解决所有的并发问题(基本不采用).
“D” 持久性: 事务在执行完毕后必须能够持久保存到数据库中!
3.了解视图的使用
是一种虚拟表,可降低查询的复杂度!可适用于不同群体对数据的不同要求!
视图的使用[视图是张虚拟表,对它的改动会最终影响到真实数据物理表]
# 视图创建
CREATE VIEW stu_result_list AS
SELECT
stu.stuName,sub.subjectName,r.result,r.examDate
FROM
result r,student stu,`subject` sub
WHERE
r.stuId = stu.stuId AND r.subjectId = sub.subjectId
ORDER BY
r.result DESC , r.examDate DESC;
# 视图的使用【视图是一张虚拟表,你对他的改动会最终影响到真实数据物理表!】
SELECT * FROM stu_result_list;
# 视图删除
DROP VIEW stu_result_list;
主要事项:
1.视图仅用于查询使用即可,不要进行修改等操作.
2.视图可以进行嵌套使用.
3.视图的数据是来自对应的物理表!
4.掌握数据库索引的创建
原理:类似字典前的目录页。
分类:普通索引\唯一索引\主键索引\复合索引\全文索引\空间索引
普通索引: 提升查询性能
唯一索引: 提升查询性能,可以保证列\字段值唯一
主键索引: 提升查询性能,可以保证主键特点! 非空唯一
复合索引: 可以将多个字段列组合提升查询性能
全文索引: 只能在MyISAM存储引擎中使用 , 提升大数据量情况下对文本查找的
索引不是一味的创建就会提升性能, 因为索引也会占用存储空间,而且索引列会在操作时进行所有索引验证…
需要谨慎的设计和使用
//创建一个普通索引
CREATE INDEX index ON student(stuName);
//创建外键和主键\唯一键都会产生对应的索引
//删除索引
DROP INDEX index ON student;
//查看索引
SHOW INDEX FROM student;
设计: [建议]
1.频繁搜索的列
2.频繁用作查询选择的列
3.经常排序分组的列
4.经常用于连接的列
[不建议]
1.仅包含几个不同值的列, 如性别\学历等
2.仅包含几行的列, 数据不多
使用注意:
1.尽量不要使用*来查找数据
2.索引列应该尽量雄安,在字节数雄小的列上建立
3.如果where中有多喝条件表达式,那么索引的条件表达式要放在前面
4.要避免索引进行计算表达式
5.了解MySQL数据库的备份和恢复
备份数据库:
mysqldump [参数选项] -u用户名 -p 密码 -h 主机地址 要备份的数据库名[要备份的数据库列表] > 输出的地址
参数选项:
-add-drop-table
--add-locks 表示在插入数据前后加上锁表和解锁语句 可以防止插入出错!
-t 只导出数据不添加书记结构创建一句
-c 可以帮助我们在导出数据时
-d 只导出表结构 不要表数据
恢复数据库:
mysqldump -u用户名 -p 密码 -h 主机地址 要恢复的数据库名 < 数据脚本地址
在登录服务器后可以使用source命令来恢复数据库。