軟件測試 | MySQL創(chuàng)建或者修改視圖
創(chuàng)建視圖需要有CREATE VIEW的權(quán)限,并且對于查詢設(shè)計的列有SELECT權(quán)限。如果使用CRESTE OR REPLACE或者ALTER修改視圖,那么還需要該視圖的DROP權(quán)限。
創(chuàng)建視圖的語法為:
修改視圖的語法為:
例如,要創(chuàng)建了視圖staff_list_view,可以使用以下命令:
MySQL視圖的定義有一些限制,例如,在FROM關(guān)鍵字后面不能含子查詢,這和其他數(shù)據(jù)庫時不同的,如果視圖是從其他數(shù)據(jù)庫遷移過來的,那么可能需要因此做一些改動,可以將子查詢的內(nèi)容先定義一個視圖,然后對該視圖再創(chuàng)建視圖就可以實現(xiàn)類似的功能了。
視圖的可更新性和視圖中查詢的定義有關(guān)系,以下類型的視圖是不可更新的。
包含以下關(guān)鍵字的SQL語句:聚合函數(shù)(SUM、MIN、MAX、COUNT等)、DISTINCT、GROUPBY、HAVING、UNION或者UNION ALL。
常量視圖
SELECT中包含子查詢
JION
FROM一個不能更新的視圖
WHERE字句的子查詢引用了FROM字句中的表
例如,以下的視圖都是不可更新的:
WITH[CASEADED | LOCAL] CHECK OPTION決定了是否允許更新數(shù)據(jù)使記錄不再滿足視圖的條件。這個選項與Oracle數(shù)據(jù)庫中的選項是類似的,其中:
LOCAL是只要滿足本視圖的條件就可以更新;
CASCADED則是必須滿足所有針對該視圖的所有視圖的條件才可以更新。
如果沒有明確的LOCAL還是CASCADED,則默認(rèn)是CASEADED。
例如,對payment表創(chuàng)建兩層視圖,并進(jìn)行更新操作:
從測試結(jié)果可以看出,payment_view1 是 WITH LOCAL CHECK OPTION 的,所以只要滿足本視圖的條件就可以更新,但是 payment_view2 是 WITH CASCADED CHECK OPTION 的,必須滿足針對該視圖的所有視圖才可以更新,因為更新后記錄不再滿足 payment_view 的條件,所以更新操作提示錯誤退出。
搜索微信公眾號:TestingStudio霍格沃茲的干貨都很硬核