寫在前面 大家好,不知道前面的20題大家寫的怎麼樣,前面分享的20題是SQL中查詢的基礎題型,這部分被稱為DQL部分,是每個學習MySQL必須要學會的部分,下麵就讓我來介紹MySQL中的TCL部分,也就是事務部分。 ACID四大特性 事務的概述 事務的ACID特性可以確保銀行不會弄丟你的錢。而在應用 ...
寫在前面
大家好,不知道前面的20題大家寫的怎麼樣,前面分享的20題是SQL中查詢的基礎題型,這部分被稱為DQL部分,是每個學習MySQL必須要學會的部分,下麵就讓我來介紹MySQL中的TCL部分,也就是事務部分。
ACID四大特性
事務的概述
事務的ACID特性可以確保銀行不會弄丟你的錢。而在應用邏輯中,要實現這一點非常難, 甚至可以說是不可能完成的任務。一個相容ACID的資料庫系統,需要做很多複雜但可能用戶並沒有覺察到的工作,才能確保ACID的實現。
原子性(Atomicity)
單個事務,為一個不可分割的最小工作單元,整個事務中的所有操作要麼全部commit成功,要麼全部失敗rollback,對於一個事務來說,不可能只執行其中的一部分SQL操作,這就是事務的原子性。
一致性(Consistency)
資料庫總是從一個一致性的狀態轉換到另外一個一致性的狀態。在前面的例子中, 一致性確保了,即使在執行第三、四條語句之間時系統崩潰,信用卡賬戶也不會損 失100塊,因為事務最終沒有提交,所以事務中所做的修改也不會保存到資料庫中,保證數據一致性。
隔離性(Isolation)
通常來說,一個事務所做的修改在最終提交以前,對其他事務是不可見的。在前面 的例子中,當執行完第三條語句、第四條語句還未開始時,此時有另外一個賬戶查詢餘額SQL開始運行,則其看到的信用卡賬戶的餘額並沒有被減去100元。
持久性(Durability)
一旦事務提交,則其所做的修改就會永久保存到資料庫中。此時即使系統崩潰,修改的數據也不會丟失。
事務的運行
步驟1:開啟事務
set autocommit=0;
start transaction;可選的
步驟2:編寫事務中的sql語句(select insert update delete)
語句1;
語句2;
......
步驟3:結束事務
commit;提交事務
rollback;回滾事務
savepoint 節點名; 設置保存點
查看mysql引擎
show ENGINES;
查看事務是否開啟
SHOW VARIABLES LIKE 'autocommit';
事務的隔離級別
臟讀 | 不可重覆讀 | 幻讀 | |
---|---|---|---|
read uncommitted | ✅ | ✅ | ✅ |
read committed | ❌ | ✅ | ✅ |
repeatable read | ❌ | ❌ | ✅ |
serializable | ❌ | ❌ | ❌ |
mysql中預設 第三個隔離級別 repeatable read
查看隔離級別
select @@tx_isolation;
mac中查看:select @@transaction_isolation
設置隔離級別
set session|global transaction isolation level 隔離級別;
設置保存點
savepoint 節點名; 設置保存點
set autocommit=0;
START TRANSACTION;
DELETE FROM account WHERE id= 1;
SAVEPOINT a; -- 設置保存點
DELETE FROM account WHERE id= 2;
ROLLBACK TO a; -- 回滾到保存點
視圖
創建視圖
語法:
create view 視圖名
as
查詢語句;
CREATE VIEW myv1
AS
SELECT last_name,
department_name,
job_title
FROM
employees e
JOIN departments d ON e.department_id = d.department_id
JOIN jobs j ON j.job_id = e.job_id ;
修改視圖
方式一:
create or replace view 視圖名
as
查詢語句;
方式二:
alter view 視圖名
as
查詢語句;
舉例:
方式一:
CREATE OR REPLACE VIEW myv1
AS
SELECT
department_name,
job_title
FROM
employees e
JOIN departments d ON e.department_id = d.department_id
JOIN jobs j ON j.job_id = e.job_id ;
方式二:
ALTER VIEW myv1
as
SELECT
*
FROM
employees ;
刪除視圖
語法:
drop view 視圖名,視圖名......;
drop VIEW myv1 ;
好了,今天的分享就到這裡了,接下來我將分享一些關於MySQL部分的面試題,希望大家都能在MySQL面試中脫穎而出!