依稀記得高三參加魔都某985自主招生面試時,一個面試老師問我SQL是什么,我當時首先說SQL是一個高級的編程語言。 當時那個老師說這個說法是有問題的。
其實我之前也比較疑惑,SQL和一般的編程語言比如C,之間的本質區別究竟是什么?
學過了復雜性理論之后,我現在可以比較透徹的理解這個問題了。
一般的編程語言是圖靈完備的,意思是說,可以用它來模擬一個圖靈機。
比方說,用C語言模擬圖靈機的紙帶和狀態轉移函數顯然是可行的。 反過來,用圖靈機來實現C語言就更直接了。
問題來了,用SQL可以模擬一個圖靈機么? 答案是,原始的標准SQL是做不到的。
一個圖靈機,或者C語言,可以永遠不終止,不宕機,做無休止的重復循環。
標准的SQL是做不到的, 如果使用recursive sql, 占用的空間會不斷增大,直到宕機。
但是當下的不同SQL,有了更豐富的擴展功能,比方說PSMs,有了這些新的特性就可以模擬一個圖靈機了。
