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
- 直接拷貝數據庫文件和相關配置文件