MySQL预处理器
問題:如果我寫了一個詞法和語法都正確的SQL,但是表名或者字段不存在,會在哪里報錯?是在數(shù)據(jù)庫的執(zhí)行層還是解析器?比如:
select * from penyuyan;解析器可以分析語法,但是它怎么知道數(shù)據(jù)庫里面有什么表,表里面有什么字段呢?
實際上還是在解析的時候報錯,解析SQL 的環(huán)節(jié)里面有個預(yù)處理器。
它會檢查生成的解析樹,解決解析器無法解析的語義。比如,它會檢查表和列名是否存在,檢查名字和別名,保證沒有歧義。
預(yù)處理之后得到一個新的解析樹。
?
總結(jié)