當前位置:編程學習大全網 - 源碼下載 - ideacms執行sql語句錯誤

ideacms執行sql語句錯誤

結構化查詢語言SQL(Structure Query Language)是壹種在關系型數據庫中定義和操縱數據的標準語言,是用戶與數據庫之間進行交流的接口。下面以SQL語言為例,簡要說明oracle數據庫是如何執行SQL語句的。

壹、 基本階段

當用戶執行SQL語句(這裏主要值數據操縱語言DML)時,通過連接,先將該語句發送到oracle服務器,再由服務器進程處理該語句。服務器進程處理SQL語句的基本階段是:解析、執行、返回結果。

1、解析(perse)

解析指檢查SQL語句的語法和語義,生成SQL語句的執行計劃,並將SQL語句和執行計劃存放到SGA區的***享SQL區中。

在解析期間服務器進程會執行如下操作:

搜索SGA區的***享SQL區,檢查其中是否存在相同的SQL語句及其執行計劃。如果有,則直接執行該SQL語句。這樣能夠提高oracle的性能

如果沒有該SQL語句,就檢查該SQL的語法。如果語法不正確,就將語法錯誤消息返回給客戶機

如果語法正確,就通過查詢數據字典,檢查該SQL語句的語義,以確定表名、列名是否正確。如果表名和列名不正確,就將語義錯誤消息返回給客戶機

如果語義正確,就給相應的對象加解析鎖,以防止在解析期間其他用戶改變這些對象的結構(或刪除這些對象)

檢查用戶是否具有訪問相應對象的相應權限。如果沒有相應權限,就將權限不夠錯誤消息返回給客戶機

如果具有相應的權限,就由SQL語句的優化器來確定該SQL語句的最佳執行計劃

為該SQL語句在SGA區的***享SQL區中分配空間,將該SQL語句及其執行計劃裝入其中,以便執行

2、 執行(execute)

執行指服務器進程按照SQL語句的執行計劃執行SQL語句。在此期間,服務器進程執行如下操作:

確定被操縱對象的數據所在的數據塊是否已經被讀取到SGA區的數據高速緩存區中了。如果數據塊在數據高速緩存中,則直接在其中操作

如果數據塊不在數據高速緩存中,則從數據文件所對應的物理存儲設備中讀取該數據塊,並在數據高速緩存中尋找空閑數據塊,將讀入的數據放入

對於update和delete語句,將需要修改或刪除的行鎖住,以便在事務結束之前相同的行不會被其他進程修改。對於select和insert語句,因為不會修改數據,所以不需要鎖住行。

3、 返回結果

對於select語句,在執行階段,要將查詢到的結果(或被標示的行)返回給用戶進程。加入查詢結果需要排序,還要利用***享池的排序區,甚至臨時表空間的臨時段來排序。查詢結果總是以列表格式顯示。根據查詢結果的大小不同,可以壹次全部返回,也可以分多次逐步返回。對於其他DML語句,將執行是否成功等狀態細心返回給用戶進程。

  • 上一篇:牛欄奶粉二維碼
  • 下一篇:雙流法和C3D卷積。
  • copyright 2024編程學習大全網