事务原则与索引

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
    • 直接拷贝数据库文件和相关配置文件
      在这里插入图片描述
发布了52 篇原创文章 · 获赞 10 · 访问量 3712

猜你喜欢

转载自blog.csdn.net/weixin_46047285/article/details/104702296