為什麼MySQL對SQL標準的支持那麼不誠意?
最近開始學資料庫,看了網上的推薦用了MySQL,結果發現這軟體相當不羈,很多SQL標準中很基本的用法(比如集合的交)都不支持。感覺很奇怪啊,這麼出名的開源軟體怎麼會連這個都不做。
大家本來就不是那麼在乎。套路一般是,MySQL不支持XX功能?那我就在自己的應用層模擬實現一個就行了。既然如此,MySQL也就沒多少動力跟進。
相當長一段時間裡,RDBMS領域的政治正確是Oracle貴,Sql Server傻,Postgres慢,只有我MySQL千秋萬代一桶漿糊。
到了現在,雖然Postgres(本來也)不慢了,Sql Server(本來也)不傻了,然而歷史慣性已經形成了,大把的app都是基於MySql開發,大把的主頁空間都是現成配好的MySql,大家也就繼續跟了。
當初mysql開始流行的時候,還只有表鎖呢,然後人們把他當NoSql用。人民群眾的忍耐力是無窮的。
有這個疑問是可以理解的,比如,我工作以後才知道,原來很多業務用資料庫,不允許用外鍵的,簡直和我畢生所學相反。
MySQL(題主注意MySQL和SQL這兩個關鍵字的拼寫)的SQL或許不標準,但是它實現了完整的4個事務隔離級別,而Oracle並沒有。所以,和看人一樣,不要盯著它的缺點,要善於發現它的優點。
MySQL能夠成為世界上最流行的開源資料庫,絕不僅僅是因為免費。PostgreSQL也是免費的啊,但是沒有成為最流行的開源資料庫。
開源軟體不都是這樣的,不爽不要玩,不爽就來contribute,不爽就去自己寫一個
當初學MySQL的時候,卧槽?unique(還是not null)實際上不做任何檢查?什麼鬼
然後我資料庫大作業特別針對性增加了unqiue(和not null)欄位的檢查。
SQL92里有交集函數?
當年, 在微軟.net技術棧下開發應用,用的就是sql server資料庫。 在特性方面, 不僅緊跟sql標準的步伐,還有自身特有的功能, 用的時候簡直爽到飛起來。 程序的業務邏輯, 基本上能在資料庫實現的就絕不會寫到代碼裡面,久而久之, 程序代碼基本上已經沒什麼東西了,就用來作為界面和資料庫的中轉而已。 而且,sql server強大之處在於, 儘管邏輯全寫在資料庫中,但是只要不瞎胡鬧,性能方面基本沒什麼問題出現, 再加上以visual studio為基礎的 management studio,就覺得.net和c#根本沒什麼卵用了, 直接資料庫可以搞定一切。 不光是我, 似乎大多數.net系開發者都是這麼做的。
後來跳了槽, 從.net系轉到了php、java系, 用的是mysql資料庫, 然後我把之前開發sql server應用程序的那套思路搬了過來開發mysql應用, 結果被同事和上級各種吐槽各種阻攔, 他們認為存儲過程、觸發器、視圖、複雜查詢之類的程序性能的毒藥,而且還影響代碼的可維護性,然而卻拿不出充分的理由,但是既然他們都堅持, 那我自己特立獨行也沒這個必要, 畢竟他們人多勢眾, 我新來咋到也不能太張楊。 另外, mysql沒有一個像樣的IDE,類似於navicat for mysql這種客戶端根本沒法和Microsoft SQL Server Management Studio相比,寫起sql代碼來要多不爽就有多不爽。 久而久之, 資料庫在我的眼裡就只剩增刪查改功能可以用了。
所以, 我覺得mysql對sql標準支持的不完善的原因在於,因為這些特性本來就不是必要的, 完全可以用程序來實現,對於基於mysql程序的開發者說,完全是可有可無的, 而且還有可能引起某些極端分子的不滿,既然如此,那mysql團隊自然不會有動力去開發這些功能, 因為開發者根本沒有強烈的需求需要這些功能,這可能就是所謂的mysql文化吧。 另外,如果誰能開發出一套類似於sql server那樣的數據配套工具, 那說不定能培養出一批像微軟技術棧那樣開發者, 把sql能發揮的威力全炸出來, 到時候說不定mysql團隊對於sql標準支持的腳本也會漸漸跟上了。
免費就是最大的feature
因為開發者不收你錢 , 也沒求你用 , 人家愛怎麼來就怎麼來
滑稽.jpg
補充輪子哥的話
人民群眾(對免費的東西)忍耐力是無窮的。
最近被mysql坑死了,天天費力的向別人解釋為什麼mysql這個不支持,那個使用有限制,這個行為是mysql特有的,跟其他資料庫不一樣。
有錢買個oracle算了,用什麼mysql. 說不定交的學費都夠買oracle的license了。其實我是這麼想的,工具而已,用什麼樣的工具做什麼樣的任務,用它優秀的地方避開它的坑,各種關係型資料庫非關係型資料庫都有它的優劣,不說mysql,也很多人吐槽mongodb的不倫不類不好維護,也有很多人喜歡它的文檔型存儲它基於replication的比較有效的容災機制。反正,需要它,搞它。
因為MySQL並不是一個SQL database,其實它只是一個有SQL界面的文件系統。
這不是給了你大把的鍛煉機會,想辦法在應用層解決業務邏輯問題嘛。
為啥都不用SQL Server呢?只是因為不免費嗎?
不是不會做,是每種dbms有不同的標準。sql語句dml,dcl,ddl都是資料庫通用的,MySQL主要的語句是Tsql,Oracle用的是plsql。就好比都是中國人,都會說普通話,但是各地有各地的方言。MySQL沒必要去兼容所有的語法吧,大家照樣用的好好的。
不同人理解不一樣吧我一開始學習的時候,啟蒙老師就說不要把邏輯用在mysql層能用邏輯外鍵就不要用事實外鍵少用觸發器等等影響性能就潛移默化認為是性能毒藥了--------後來發現,事實外鍵還是有人用的但自己習慣已經很難改,很不喜歡把報錯級別上升到資料庫級別,不如程序級別可控,就像後來migration那種資料庫版本管理工具的理念一樣--------
還是習慣+除非有特殊的業務需求,技術是跟著需求走的
Not in 直接排除空值
因為不支持的東西用支持的東西三兩句就搞出來了嘛
或許MySQL設計的初衷就是不要將大量業務邏輯寫在sql里的吧。
來源的有已經不錯了,有錢去玩oracle
都是流行惹得禍。。。。
就開源領域說
MySQL : the most popular databasePostgreSQL : the most advanced database用MySQL我是很不習慣。推薦閱讀:
※SQL 設計得爛嗎,諸如redis,nosql又該如何選擇?
※什麼是最好的oracle sql 開發工具?
※sql server中如何儘可能高效地把表導出成excel,有好幾億條數據?
※誰有精簡的SQLSerVer安裝包,聽說有一種只有28M?
※win7如何安裝SQL資料庫2000?