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