事務原則與索引

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
    • 直接拷貝數據庫文件和相關配置文件
      在這裏插入圖片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章