解析器會檢查每條語句都會的關鍵字語法正確性,如果一條語句語法有誤,解析器會拒絕本次請求。例如:如果把”SELECT”寫成”SLECT”,就會遭到拒絕。
解析器還會進一步檢查關鍵字出現的順序,比如WHERE出現在SELECT之前就會被拒絕。
另外,查詢中的表明和字段名會被解析,解析器會使用數據庫的元數據來進行對比檢查:
- 表是否存在。
- 表中的字段是否存在。
- 對於這種字段類型的操作是否合法,比如:不能將String和Integer進行對比、不能對一個Integer使用substring()函數。
還會檢查當前用戶是否具備讀或寫表的權限,這些權限同樣是由DBA來設置。在解析之後,SQL語句會被轉換爲一種數據庫內部表示,通常是轉換爲一種樹結構。如果解析器一切OK,那麼內部表示就會被轉發給重寫器繼續處理。