共計 1666 個字符,預計需要花費 5 分鐘才能閱讀完成。
今天就跟大家聊聊有關 MySQL 不支持的功能,可能很多人都不太了解,為了讓大家更加了解,丸趣 TV 小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
MySQL 不支持的功能
這里介紹其他數據庫中有而 MySQL 中無的功能。它介紹省略了什么功能,以及在需要這些功能時怎么辦。一般情況下,MySQL 之所以忽略某些功能是因為它們有負面性能影響。有的功能正在開發者的計劃清單上,一旦找到一種方法可以實現相應的功能而又不致于影響
良好性能的目標,就會對它們進行實現。
■ 子選擇。子選擇是嵌套在另一個 SELECT 語句內的 SELECT 語句,如下面的查詢所示:
SELECT * FROM score
WHERE event_id IN (SELECT event_id FROM event WHERE type = T)
子選擇打算在 MySQL3.24 中給出,到那時它們就不會忽略了。但到那時,許多用子選擇撰寫的查詢也可以用連接來編寫。請參閱 3 . 8 . 1 節“將子選擇編寫為連接”。
■ 事務處理和提交 / 回退。事務處理是由其他客戶機作為一個整體不中斷執行的一組 SQL 語句。提交 / 回退功能允許規定數條語句作為一個整體執行或不執行。即,如果事務處理中的任何一條語句失敗,那么直到該語句前執行的所有語句的作用都被撤消。
ySQL 自動進行單一 SQL 語句的同步以免客戶機互相干擾。(例如,兩個客戶機不能對相同的表進行同時寫入。)此外,可利用 LOCK TABLES 和 UNLOCK TABLES 將數條語句組成一個整體,這使您能夠完成單條語句的并發控制所不能滿足的操作。MySQL 與事務處理有關的問題是,它不能自動對數條語句進行組織,而且如果這些語句中有某一條失敗后也不能對它們進行回退。
為了弄清事務處理為什么有用,可舉例說明。假如您在服裝銷售業工作,無論何時,只要您的銷售人員進行了一次銷售,都要更新庫存數目。下面的例子說明了在多個銷售人員同時更新數據庫時可能出現的問題(假如初始的襯衫庫存數目為 4 7):
t1 銷售人員 1 賣出 3 件襯衫
t2 銷售人員檢索當前襯衫計數(4 7):
SELECT quantity FROM inventory WHERE item = shirt
t3 銷售人員 2 賣出 2 件襯衫
t4 銷售人員 2 檢索當前襯衫計數(4 7)
SELECT quantity FROM inventory WHERE item = shirt
t5 銷售人員 1 計算庫存的新數目為 47 – 3 = 44 并設置襯衫計數為 44:
UPDATE inventory SET quantity = 44 WHERE item = shirt
t6 銷售人員 2 計算庫存的新數目為 47 – 2 = 45 并設置襯衫計數為 45:
UPDATE inventory SET quantity = 45 WHERE item = shirt
在這個事件序列結束時,您已經賣掉了 5 件襯衫,但庫存數目卻是 45 而不是 4 2。問題是如果在一條語句中查看庫存而在另一條語句中更新其值,這是一個多語句的事務處理。第二條語句中所進行的活動取決于第一條語句中檢索出的值。但是如果在重疊的時間范圍內出現獨立的事務處理,則每個事務處理的語句會糾纏在一起,并且互相干擾。在事務處理型的數據庫中,每個銷售人員的語句可作為一個事務處理執行,這樣,銷售人員 2 的語句在銷售人員 1 的語句完成之前不會被執行。在 MySQL 中,可用兩種方法達到這個目的:
■ 方法 1:作為一個整體執行一組語句。可利用 LOCK TABLES 和 UNLOCK TABLES 將語句組織在一起,并將它們作為一個原子單元執行:鎖住所需使用的表,發布查詢,然后釋放這些鎖。這樣阻止了其他人在您鎖住這些表時使用它們。利用表同步,庫存情況如下所示:
t1 銷售人員 1 賣出 3 件襯衫
t2 銷售人員 1 請求一個鎖并檢索當前襯衫計數(47)
LOCK TABLES inventory WRITE
SELECT quantity FROM inventory WHERE item = shirt
t3 銷售人員 2 賣出 2 件襯衫
看完上述內容,你們對 MySQL 不支持的功能有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注丸趣 TV 行業資訊頻道,感謝大家的支持。