我構(gòu)建了一個(gè)查詢,我想知道它是否適用于MySQL以外的任何數(shù)據(jù)庫(kù).我從來(lái)沒有真正使用過(guò)其他數(shù)據(jù)庫(kù),所以我對(duì)這些差異并不滿意.
以下是我所依賴的具體功能(我可以想到它們): >更新查詢. 我相信人們會(huì)好奇這是做什么的,這也可能包括可能無(wú)處不在的數(shù)據(jù)庫(kù)功能.這是使用數(shù)據(jù)庫(kù)進(jìn)行互斥的實(shí)現(xiàn),用于Web應(yīng)用程序.在我的情況下,我需要它,因?yàn)槟承┯脩舨僮鲗?dǎo)致表被刪除并使用不同的列重新創(chuàng)建,我想避免錯(cuò)誤,如果應(yīng)用程序的其他部分嘗試插入數(shù)據(jù).因此,該實(shí)施專門用于解決the readers-writers problem. 此查詢假定存在具有兩個(gè)字段的表鎖:key(varchar)和value(int).它進(jìn)一步假設(shè)該表包含一行,使得key =“key1”.然后它嘗試增加“key1”的值.只有當(dāng)列表中的每個(gè)鍵(“key2”,“key3”)時(shí),它才會(huì)這樣做,相關(guān)的值為0(l2的WHERE條件是假設(shè)值永遠(yuǎn)不為負(fù)的近似值).因此,如果滿足某些條件,則該查詢僅“獲得鎖定”,可能是以原子方式.然后,應(yīng)用程序檢查它是否通過(guò)查詢的返回值收到鎖定,該返回值可能表示受影響的行數(shù).當(dāng)且僅當(dāng)沒有行受影響時(shí),應(yīng)用程序才會(huì)收到鎖定. 因此,以下是查詢本身無(wú)法識(shí)別的附加條件: >假設(shè)在多線程環(huán)境中,此查詢的副本永遠(yuǎn)不會(huì)與另一個(gè)副本交錯(cuò). 作為輔助請(qǐng)求,我將非常感謝“標(biāo)準(zhǔn)SQL”上的任何資源.我聽說(shuō)過(guò)它,但從來(lái)沒有找到任何類型的定義,當(dāng)MySQL文檔說(shuō)“這個(gè)功能是標(biāo)準(zhǔn)SQL的擴(kuò)展”時(shí),我覺得我錯(cuò)過(guò)了很多東西. 根據(jù)響應(yīng),此查詢應(yīng)在所有系統(tǒng)中更好地工作:
由于好的答案,為每個(gè)人提供支持.標(biāo)記的答案旨在直接回答我的問(wèn)題,即使只針對(duì)另一個(gè)DBMS,即使可能有更好的解決方案來(lái)處理我的特定問(wèn)題(甚至一般的跨平臺(tái)SQL問(wèn)題). 解決方法: 對(duì)于PostgreSQL
無(wú)法想象沒有UPDATE的RDBMS. (?)
在PostgreSQL中,您將包含
在PostgreSQL中不可能.使用子查詢,CTE或Window函數(shù).
適用于我所知道的任何RDBMS.
PostgreSQL的multiversion model MVCC(多版本并發(fā)控制)在處理并發(fā)性方面優(yōu)于MySQL.然而,在這方面,大多數(shù)RDBMS都優(yōu)于MySQL.
Postgres就是這樣做的,大多數(shù)RDBMS都這樣做. 此外,此查詢不會(huì)在PostgreSQL中運(yùn)行,因?yàn)椋?/p> >沒有反叛的identifiers(這是MySQL俚語(yǔ)). 見list of reserved words in Postgres and SQL standards. |
|