MySQL懸系之事務與視圖說明
發表時間:2023-09-03 來源:明輝站整理相關軟件相關文章人氣:7
[摘要]一、事務1、提交2、回滾3、ACID特性二、視圖1、創建視圖2、刪除視圖3、更新視圖4、使用視圖三、子查詢1、 使用子查詢2、 標量子查詢3、 關聯子查詢一、事務在 RDBMS 中,事務是對表中數據進行更新的單位。簡單來講,事務就是需要在同一個處理單元中執行的一系列更新處理的集合。事務開始語句ST...
一、事務
在 RDBMS 中,事務是對表中數據進行更新的單位。簡單來講,事務就是需要在同一個處理單元中執行的一系列更新處理的集合。
事務開始語句START TRANSACTION;
DML語句①;
DML語句②;
DML語句③;
.
.
.
事務結束語句(COMMIT或者ROLLBACK);
1、提交
COMMIT 是提交事務包含的全部更新處理的結束指令,相當于文件處理中的覆蓋保存。一旦提交,就無法恢復到事務開始前的狀態了。
2、回滾
ROLLBACK 是取消事務包含的全部更新處理的結束指令,相當于文件處理中的放棄保存。一旦回滾,數據庫就會恢復到事務開始之前的狀態。
3、ACID特性
DBMS 的事務都遵循四種特性,將這四種特性的首字母結合起來統稱為 ACID 特性。
原子性(Atomicity)
原子性是指在事務結束時,其中所包含的更新處理要么全部執行,要么完全不執行。
一致性(Consistency)
一致性指的是事務中包含的處理要滿足數據庫提前設置的約束,如主鍵約束或者 NOT NULL 約束等。例如,設置了 NOT NULL 約束的列是不能更新為 NULL 的,試圖插入違反主鍵約束的記錄就會出錯,無法執行。對事務來說,這些不合法的 SQL 會被回滾。
隔離性(Isolation)
隔離性指的是保證不同事務之間互不干擾的特性。該特性保證了事務之間不會互相嵌套。此外,在某個事務中進行的更改,在該事務結束之前,對其他事務而言是不可見的。因此,即使某個事務向表中添加了記錄,在沒有提交之前,其他事務也是看不到新添加的記錄的。
持久性(Durability)
持久性指的是在事務(不論是提交還是回滾)結束后,DBMS 能夠保證該時間點的數據狀態會被保存的特性。即使由于系統故障導致數據丟失,數據庫也一定能通過某種手段進行恢復。
二、視圖
視圖和表的本質不同在于“是否保存了實際的數據”。
表中存儲的是實際數據,而視圖中保存的是從表中取出數據所使用的SELECT語句。
我們應該將經常使用的SELECT語句做成視圖。
1、創建視圖
--格式:CREATE VIEW 視圖名稱(<視圖列名1>, <視圖列名2>, ……) AS <SELECT語句>
CREATE VIEW v1 (product_name, name_cnt)
AS
SELECT product_name, count(*)
FROM
表名/視圖名
GROUP BY product_name
注意:
2、刪除視圖
--格式:DROP VIEW 視圖名稱
DROP VIEW v1
3、更新視圖
-- 格式:ALTER VIEW 視圖名稱 AS <SELECT語句>
-- 格式:INSERT INTO 視圖名稱 VALUES(...)
注意:
記住,對視圖的更新歸根結底是對視圖所對應的表進行更新。
4、使用視圖
使用視圖時,將其當作表進行操作即可,由于視圖是虛擬表,所以無法使用其對真實表進行創建、更新和刪除操作,僅能做查詢用。
select * from v1
三、子查詢
1、 使用子查詢
子查詢就是一次性視圖(SELECT語句)。與視圖不同,子查詢在SELECT語句執行完畢之后就會消失。
-- 根據商品種類統計商品數量的視圖
CREATE VIEW ProductSum (product_type, cnt_product)
AS
SELECT product_type, COUNT(*)
FROM Product
GROUP BY product_type;
-- 確認創建好的視圖
SELECT product_type, cnt_product
FROM ProductSum;
--子查詢
SELECT product_type, cnt_product
FROM (SELECT product_type, COUNT(*)
FROM Product
GROUP BY product_type)AS ProductSum;
2、 標量子查詢
標量子查詢則有一個特殊的限制,那就是必須而且只能返回 1 行 1 列的結果,也就是返回表中某一行的某一列的值。
SELECT product_id, product_name, sale_price
FROM Product
WHERE sale_price > (SELECT AVG(sale_price)
FROM Product);
3、 關聯子查詢
在細分的組內進行比較時,需要使用關聯子查詢。
--子查詢中添加的 WHERE 子句的條件
--該條件的意思是,在同一商品種類中對各商品的銷售單價和平均單價進行比較。
SELECT product_id, product_name, sale_price
FROM Product AS P1
WHERE sale_price > (SELECT AVG(sale_price)
FROM Product AS P2
WHERE P1.product_type = P2.product_type
GROUP BY product_type);
以上就是MySQL懸系之事務與視圖介紹的詳細內容,更多請關注php中文網其它相關文章!
學習教程快速掌握從入門到精通的SQL知識。