5.事务ACID理解
参考博客:https://blog.csdn.net/dengjili/article/details/82468576
MySQL事务
- 事务就是将一组SQL语句放在同一批次内去执行
- 如果一个SQL语句出错,则该批次内的所有SQL都将被取消执行
- MySQL事务处理只支持InnoDB和BDB数据表类型
事务的ACID原则
原子性(Atomicity)
原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
一致性(Consistency)
事务前后数据的完整性必须保持一致。
持久性(Durability)
持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响
隔离性(Isolation)
事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。(如果隔离失败,则会失败,导致产生 脏读,不可重复读,幻读等)
事务的理解:模拟转账
-- =========事务的理解========
-- 1.创建一个数据库
CREATE DATABASE `shop`CHARACTER SET utf8 COLLATE utf8_general_ci;
USE `shop`;
-- 2.创建一个`account`表
CREATE TABLE `account` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(32) NOT NULL,
`cash` DECIMAL(9,2) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8
-- 3. 添加数据
INSERT INTO `account`(`name`,`cash`)
VALUES ('A',800),('B',200)
-- 4.模拟转账事务
SET autocommit = 0 -- 关闭自动提交
START TRANSACTION -- 开启一组事务
-- 5.开始转账 A 转账200给B
UPDATE `account` SET `cash`=`cash`-200 WHERE `name`='A'
UPDATE `account` SET `cash`=`cash`+200 WHERE `name`='B'
-- 6. 提交与回滚
COMMIT; -- 提交事务
ROLLBACK; -- 回滚
-- 7.恢复默认值
SET autocommit = 1 ;-- 恢复默认值
补充说明
-- =========事务的理解========
-- mysql 是默认开启事务提交的
SET autocommit = 0 -- 关闭
SET autocommit = 1 -- 开启
-- 手动处理事务
SET autocommit = 0 -- 关闭自动提交
-- 开启事务
START TRANSACTION -- 标记这个事务的开始,从这以后的sql语句都在同一个事务中
INSERT **
INSERT **
-- 提交,持久化(成功)
COMMIT;
-- 回滚,回到原来的样子(失败)
ROLLBACK;
-- 事务结束
SET autocommit = 1 -- 开启自动提交
-- 了解内容
SAVEPOINT 保存点名-- 设置一个事务的保存点
ROLLBACK TO SAVEPOINT 保存点名 -- 回滚到保存点
RELEASE SAVEPOINT -- 撤销保存点
数据库索引
推荐CSDN:https://blog.csdn.net/weixin_42181824/article/details/82261988
作用 :
- 提高查询速度
- 确保数据的唯一性
- 可以加速表和表之间的连接 , 实现表与表之间的参照完整性
- 使用分组和排序子句进行数据检索时 , 可以显著减少分组和排序的时间
- 全文检索字段进行搜索优化.
分类 :
-
主键索引 (Primary Key)
唯一标识,不可重复,只能有一个列作为主键
-
唯一索引 (Unique)
避免出现重复列,唯一索引可以重复,多个列都可以标识唯一索引
-
常规索引 (Index/key)
默认的是index,key关键字可以设置
-
全文索引 (FullText)
在特定的数据库引擎下才有,可实现快速定位数据 作用 : 快速定位特定数据 注意 : 只能用于MyISAM类型的数据表 只能用于CHAR , VARCHAR , TEXT数据列类型 适合大型数据集
索引简介
-- ========索引练习=========
-- 1.在创建表的时候使用
-- 2.创建完表后增加索引
-- 3.创建完表后修改索引
-- 显示所有的索引信息
SHOW INDEX FROM `student_table`
-- 增加一个全文索引 (索引名)列名
ALTER TABLE `indextest`.`student_table`ADD FULLTEXT INDEX `name`(`name`);
-- EXPLAIN 分析sql执行得情况
EXPLAIN SELECT * FROM `student_table`; -- 全文索引
EXPLAIN SELECT * FROM `student_table` WHERE MATCH (`name`)AGAINST('李')
索引准则
- 索引不是越多越好
- 不要对经常变动的数据加索引
- 小数据量的表建议不要加索引
- 索引一般应加在查找条件的字段
MySQL备份
-
数据库备份必要性
- 保证重要数据不丢失
- 数据转移
-
MySQL数据库备份方法
- mysqldump备份工具
- 数据库管理工具,如SQLyog
- 直接拷贝数据库文件和相关配置文件