跳轉到內容

面向十一級 (CBSE) 的資訊學實踐 / MySQL 簡介

來自華夏公益教科書

注意: 基於 MySQL 簡介章節MySQL 圖書 初始化。資料儲存在關係資料庫中,儲存在一個或多個表中。

什麼是 SQL?

[編輯 | 編輯原始碼]

注意: 基於 SQL 華夏公益教科書

SQL結構化查詢語言 的首字母縮略詞,它是一種用於從資料庫中請求資料、向資料庫中的表格新增、更新或刪除資料的語言,或者用於操作資料庫的元資料。

SQL 通常被髮音為其名稱中的三個字母,例如 ess-cue-ell,或者在某些人的用法中,發音為 sequel

SQL 是一種宣告式語言,其中期望的結果或操作在沒有完成任務的具體細節的情況下給出。執行 SQL 命令所需的步驟由 SQL 資料庫透明地處理。有時 SQL 被描述為 非過程化,因為過程化語言通常需要指定操作的細節,例如開啟和關閉表格、載入和搜尋索引、或者重新整理緩衝區並將資料寫入檔案系統。因此,SQL 被認為是設計在比過程化語言更高的概念操作級別,因為更低級別的邏輯和物理操作沒有被指定,而是由執行 SQL 的 SQL 引擎或伺服器程序決定。

指令以命令的形式給出,命令由特定的 SQL 命令以及適用於該命令的附加引數和運算元組成。檢索名為 Customers 的表格的所有行和列的最簡單示例是

SELECT * FROM Customers;

在 SELECT 命令後面的星號 (*) 是一個萬用字元,指的是表格中的所有列。SQL 假設要檢索整個記錄集,除非你提供條件邏輯來將結果限制為子集,子集使用 WHERE 子句新增。以下是名為 Customers 的表格的一些典型的 SQL 示例,該表格有三個列:CustomerID、LastName 和 FirstName。

SELECT LastName, FirstName FROM Customers WHERE CustomerID=99;

返回 CustomerID 值為 99 的客戶的姓氏和名字。通常情況下,這將返回一行(如果存在),因為像 CustomerID 這樣的值將被定義為主鍵,它唯一地標識一個客戶,並且不能有其他行使用相同的值進行標識。


SELECT LastName, FirstName FROM Customers ORDER BY LastName, FirstName;

返回所有客戶的姓氏和名字的按字母順序排序的列表。


INSERT INTO Customers (CustomerID, LastName, FirstName) Values (1, "Doe", "John");

建立一個 CustomerID 為 1 的行,用於 John Doe。


UPDATE Customers SET FirstName="Johnny" WHERE CustomerID=1;

將 John Doe 的名字更改為 Johnny。


DELETE Customers WHERE CustomerID=1;

刪除 CustomerID 為 1 的行。


一般情況下,SQL 不區分大小寫,並忽略多餘的空格字元,除了字母數字字串的內容。大寫字母通常用於 SQL 命令作為一種風格問題,但這並不是一種普遍的約定。

某些資料庫支援 儲存過程,其中 SQL 嵌入在另一種過程化語言中,以操作伺服器上的資料或表格,以執行比僅 SQL 允許的更復雜的操作,並且不一定要從伺服器返回資料。這些過程化語言通常是 SQL 伺服器供應商專有的。例如,Oracle 使用自己的語言 PL/SQL,而 Microsoft SQL Server 使用 T-SQL。這些過程化語言在設計和功能上相似,但使用不同的語法,這些語法不可互操作。

SQL 也可以嵌入到其他語言中,使用 SQL 模組、庫或預編譯器,這些模組、庫或預編譯器提供函式來開啟與 SQL 伺服器的通訊路徑,以傳送命令並檢索結果。由於執行 SQL 命令是對主機語言外部由 SQL 伺服器執行的有用服務,因此整個處理過程被分成兩個層級:客戶端層和伺服器層。用於提供客戶端和伺服器之間連線的模組和庫通常被稱為 中介軟體,特別是在允許從客戶端使用一個介面連線到來自不同供應商的各種伺服器時。ODBC、JDBC、OLEDB 是常見的中介軟體庫,在許多其他特定於各種客戶端主機作業系統和程式設計模型的庫中。SQL 的使用已經如此普遍,以至於在應用程式語言中找不到不支援 SQL 的情況將是不尋常的。

SQL 命令及其修飾符基於官方 SQL 標準以及每個資料庫供應商實施的該標準的某些擴充套件。通常情況下,命令被分組到以下類別中

資料定義語言 ( DDL )
  • CREATE - 用於建立新表格、表格檢視或資料庫中的其他物件。
  • ALTER - 用於修改現有的資料庫物件,例如表格。
  • DROP - 用於刪除整個表格、表格檢視或資料庫中的其他物件。
資料控制語言 ( DCL )
  • GRANT - 用於授予某人許可權。
  • REVOKE - 用於收回授予某人的許可權。
資料操作語言 ( DML )
  • INSERT - 用於建立記錄。
  • UPDATE - 用於更改某些記錄。
  • DELETE - 用於刪除某些記錄。
資料查詢語言 ( DQL )
  • SELECT - 用於從一個或多個表格中檢索某些記錄。


為什麼選擇 MySQL?

[編輯 | 編輯原始碼]
  • 自由軟體 - 根據 GPL 版本 2 許可證釋出(儘管可以從 Sun Microsystems 購買不同的許可證,見下文)
  • 成本 - 免費!
  • 支援 - 線上教程、論壇、郵件列表 (lists.mysql.com)、付費支援合同。
  • 速度 - 可用資料庫中最快的資料庫之一。
  • 功能 - 支援大多數 ANSI SQL 命令。
  • 易用性 - 減少培訓/再培訓的需要。
  • 可移植性 - 輕鬆地從 Excel 和其他資料庫匯入/匯出。
  • 可擴充套件性 - 適用於小型資料庫和大型資料庫,這些資料庫包含數十億條記錄和數千兆位元組的資料,分佈在數十萬個表格中。
  • 協作 - 選擇性地授予或撤銷使用者的許可權。

MySQL 許可證

[編輯 | 編輯原始碼]

MySQL 在 雙重許可 模式下提供。

  • 在 GNU 通用公共許可證版本 2(“或更高版本”在 2007 年之前的版本中允許)下:這是一個自由(如自由)的版權軟體許可證,允許你在你的應用程式中將 MySQL 用於商業和非商業目的,只要你的應用程式在 GNU GPL 下發布。還有一個“FLOSS 異常”,它本質上允許非 GPL 但免費的應用程式(如 PHP 程式語言,在 PHP 許可證下)連線到 MySQL 伺服器。該異常列出了一組免費和開源軟體許可證,除了 GNU GPL,這些許可證還可以用於你的依賴 MySQL 的免費應用程式。
  • 一個所謂的“商業”[1],付費許可證,即 MySQL 授予你將 MySQL 與你自己的組織外部分發的非 FLOSS 應用程式整合的權利。[2]

MySQL 及其分支

[編輯 | 編輯原始碼]

MySQL 是自由軟體,因此存在一些分支和非官方構建,這些分支和構建提供了來自社群的貢獻。

2008 年,Sun Microsystems 收購了 MySQL。收購後,開發流程發生了改變。該團隊開始以較低的頻率釋出新的 MySQL 版本,因此新程式碼的測試較少。來自社群的貢獻也減少了。

2009 年,MySQL 創始人 Monty Widenius 離開了公司,建立了一家名為 The Monty Program 的新公司。他啟動了一個名為 MariaDB 的新分支。MariaDB 的目標是

  • 匯入所有將新增到主 MySQL 分支中的新程式碼,並對其進行增強以使其更加穩定;
  • 清理 MySQL 程式碼;
  • 新增來自社群的貢獻(新的外掛、新功能);
  • 開發 Maria 儲存引擎;
  • 為伺服器新增新功能。

目前還沒有這個分支的公開版本。它的許可證將是 GNU GPLv2(繼承自 MySQL)。

2008 年,MySQL 首席架構師 Brian Aker 離開了專案,開始了一個名為 Drizzle 的新分支。Sun Microsystems 為該專案提供資金。它的特點是

  • 在這個分支中,只有很小一部分 MySQL 程式碼得以保留,其餘部分被刪除:Drizzle 伺服器中只實現了基本功能;
  • 保留的程式碼已清理;
  • Drizzle 是模組化的:許多功能是或可以作為外掛實現;
  • 該軟體針對多 CPU 和多核 64 位機器進行了最佳化;
  • 僅支援 GNU/Linux 和 UNIX 系統。

目前還沒有這個分支的公開版本。它的主要許可證將是 GNU GPLv2(繼承自 MySQL),但只要有可能,就會使用 BSD 許可證。

OurDelta - Builds for MySQL 是另一個分支。它基於 MySQL 主分支,並添加了一些由社群貢獻的補丁。一些補丁也將被 MariaDB 使用。

參考資料

[編輯 | 編輯原始碼]
  1. 稱其為“商業”是誤導性的,因為 GNU GPL 可以用於商業(但非專有)專案。
  2. 專有專案仍然可以使用舊版本的 MySQL 客戶端連線庫(根據 GNU 寬通用公共許可證)連線到 MySQL 伺服器,而無需購買此許可證。但是,這些庫無法連線到最新版本的 MySQL 伺服器。
華夏公益教科書