SQL

維基百科,自由的百科全書
跳轉到: 導覽搜尋

結構化查詢語言en:Structured Query Language,縮寫為SQL),一種程式語言,用於資料庫中的標準資料查詢語言IBM公司最早使用在其開發的資料庫系統中。1986年10月,美國國家標準學會(ANSI)對SQL進行規範後,以此作為關聯式資料庫管理系統的標準語言(ANSI X3. 135-1986),1987年得到國際標準組織的支援下成為國際標準。不過各種通行的資料庫系統在其實踐過程中都對SQL規範作了某些編改和擴充。所以,實際上不同資料庫系統之間的SQL不能完全相互通用。

歷史[編輯]

在1970年代初,由IBM公司San Jose,California研究實驗室的埃德加·科德發表將資料組成表格的應用原則(Codd's Relational Algebra)。1974年,同一實驗室的D.D.Chamberlin和R.F. Boyce對Codd's Relational Algebra在研製關聯式資料庫管理系統System R中,研製出一套規範語言-SEQUEL(Structured English QUEry Language),並在1976年11月的IBM Journal of R&D上公布新版本的SQL(叫SEQUEL/2)。1980年改名為SQL。

1979年ORACLE公司首先提供商用的SQL,IBM公司在DB2和SQL/DS資料庫系統中也實作了SQL。

1986年10月,美國ANSI採用SQL作為關聯式資料庫管理系統的標準語言(ANSI X3. 135-1986),後為國際標準化組織(ISO)採納為國際標準。

1989年,美國ANSI採納在ANSI X3.135-1989報告中定義的關聯式資料庫管理系統的SQL標準語言,稱為ANSI SQL 89,該標準替代ANSI X3.135-1986版本。該標準為下列組織所採納:

國際標準化組織(ISO),為ISO 9075-1989報告「Database Language SQL With Integrity Enhancement」

美國聯邦政府,發行在The Federal Information Processing Standard Publication(FIPS PUB)127

目前,所有主要的關聯式資料庫管理系統支援某些形式的SQL,大部分資料庫打算遵守ANSI SQL89標準。

語言特點[編輯]

SQL是高階的非過程化編程語言,它允許使用者在高層資料結構上工作。它不要求使用者指定對資料的存放方法,也不需要使用者了解其具體的資料存放方式。而它的介面,能使具有底層結構完全不同的資料庫系統和不同資料庫之間,使用相同的SQL作為資料的輸入與管理。它以記錄專案〔records〕的合集(set)〔項集,record set〕作為操縱物件,所有SQL語句接受項集作為輸入,回送出的項集作為輸出,這種項集特性允許一條SQL語句的輸出作為另一條SQL語句的輸入,所以SQL語句可以巢狀,這使它擁有極大的靈活性和強大的功能。在多數情況下,在其他編程語言中需要用一大段程式才可實踐的一個單獨事件,而其在SQL上只需要一個語句就可以被表達出來。這也意味著用SQL可以寫出非常複雜的語句。

SQL同時也是資料庫檔案格式副檔名

SQL包含3個部分:

標準化[編輯]

以SQL為基礎的其他延伸語言[編輯]

微軟MS SQL-Server,以及Sybase Adaptive Server系列資料庫所用的SQL
Oracle 資料庫所使用的SQL

安全問題[編輯]

由於SQL指令在部份進階使用時,語法會依照特定條件來變換,而且若是表格中的欄位過多時,許多開發人員都會習慣以字串組立的方式建立SQL指令,而且又使用系統管理員級的帳戶連到資料庫,因此讓駭客有機會利用SQL的組立方式進行攻擊,像是在指令中添加部份刺探性或破壞性的指令(例如DROP TABLEDROP DATABASE或是DELETE * FROM myTable等具破壞性的指令),讓資料庫的資料或實體伺服器被破壞,導致服務中斷或是系統癱瘓等後果,此種攻擊手法稱為SQL注入(SQL injection)。

目前實務上較有效的防禦方法,就是全面改用參數化查詢

相關[編輯]

Wikibooks-logo.svg
您可以在維基教科書中尋找此百科條目的相關電子教程:

外部連結[編輯]


資料庫管理系統(DBMS) (檢視 · 討論 · 編輯)

概念
資料庫 · 資料模型 · 資料庫儲存結構英語Database storage structures · 關聯 (資料庫) · 關聯模型 · 分布式資料庫 · ACID ( 原子性 · 一致性 · 隔離性 · 永續性 ) · Null值
關聯式資料庫 · 關聯模型 · 資料庫正規化 · 資料庫完整性 · 實體完整性 · 參照完整性 · 關聯式資料庫管理系統 
主鍵 · 外來鍵 · 代理鍵 · 超鍵 · 候選鍵 

資料庫元件
觸發器 · 檢視 · 資料庫表 · 指標 (資料庫) · 事務日誌英語Transaction log · 資料庫事務 · 並行控制 · 樂觀鎖 · 悲觀鎖 · 資料庫索引 
儲存程式 · 資料庫分割

SQL
分類: 資料查詢語言 (DQL) - 資料定義語言 (DDL) - 資料操縱語言 (DML) - 資料控制語言 (DCL)
指令:SELECT · INSERT · UPDATE · MERGE · DELETE · JOIN · UNION · CREATE · DROP · Begin work · COMMIT · ROLLBACK · TRUNCATE · ALTER
安全: SQL資料隱碼攻擊 · 參數化查詢

資料庫管理系統的實作

實作型別
關聯式資料庫 · 檔案型資料庫 · Deductive · 維度化資料庫 · 階層式 · 圖形資料庫 · 物件資料庫 · 物件關聯式資料庫 · Temporal · XML資料庫

資料庫產品
物件型 (對比) · 關聯型 (對比)

資料庫元件
資料查詢語言 · 查詢最佳化器 · 查詢計畫 · 嵌入式SQL · ODBC · JDBC · OLE DB