依稀记得高三参加魔都某985自主招生面试时,一个面试老师问我SQL是什么,我当时首先说SQL是一个高级的编程语言。 当时那个老师说这个说法是有问题的。
其实我之前也比较疑惑,SQL和一般的编程语言比如C,之间的本质区别究竟是什么?
学过了复杂性理论之后,我现在可以比较透彻的理解这个问题了。
一般的编程语言是图灵完备的,意思是说,可以用它来模拟一个图灵机。
比方说,用C语言模拟图灵机的纸带和状态转移函数显然是可行的。 反过来,用图灵机来实现C语言就更直接了。
问题来了,用SQL可以模拟一个图灵机么? 答案是,原始的标准SQL是做不到的。
一个图灵机,或者C语言,可以永远不终止,不宕机,做无休止的重复循环。
标准的SQL是做不到的, 如果使用recursive sql, 占用的空间会不断增大,直到宕机。
但是当下的不同SQL,有了更丰富的扩展功能,比方说PSMs,有了这些新的特性就可以模拟一个图灵机了。