SQL 是 structured Query Language,結構化查詢語言,當某個要詢問的問題 = 以 SQL 寫成的命令,像某處 = 向資料庫,用通訊方式傳輸 = 透過 TCP/IP 網路傳輸。
傳統資料庫有各種形式:
-
Tree:
例如 XML format (HTML format) 使用文字資料及用 tag 標籤來做網路上交換資料與紀錄的傳輸格式方式,依循 xml 的資料稱為 XML instance。
尋找其中特定元素,則使用 XPath 階層的軌跡,有自己的 FLOWOR 和 XQuery 語言處理 xml 實體。
資料庫中也有支援 xml 的資料型別,其中資料庫有專門儲存 xml 實體的型別,一旦使用此型別後,便可搜索 xml 實體中的特定元素了!
-
Card
-
Object
意義是從數學的關聯代數的數學理論而來,其以資料表和集合的方式表達資料的系統,基本要素就是資料表,即試算表中的工作表,而資料表則由欄位(行)與列所構成。
資料表彼此可以獨立,也可以保有關係,但只有部分關係,稱為 relationship!
-
Set (集合)
-
Table (資料表)
-
Tuple (值組)= row 列
列無須命名,列為行 (欄位) 的集合,由於資料庫限制,要製造出數萬行是不可能,但製造出數百萬列是有可能的。
- Attribut (屬性)= column 行
行數太多的資料表和資料庫效率不好,所以要建立出很多含有少數欄位的資料表。
決定行與列以後,可以指定單一『儲存格 (cell)』 在儲存格中寫入值後,可進行儲存,儲存的值取決於其中定義的資料型別。
- Primary Key 主鍵 (自動生成索引)
因於索引的關係,資料搜尋效率會提升,另外,因為外部索引鍵整合性的限制 Foreign Key Constraints,必須設定主鍵。
可以在資料表中指定 1 個或 1 個以上的 column 行作為主 key,且不可為 NULL,這些值在資料表中都設定為獨一無二。
倘若資料無法避免重複性的話,可以設定編號 ID 為主鍵。
指定主鍵的方式:
CREATE TABLE 或是 ALTER TABLE
- Foreign Key 外來鍵 (外部參照-整合制約)
SQL 由保留字、資料庫物件、陳述式(資料表+運算子+函數+常數)等要素構成。。
SQL 目的是最資料庫進行存取,基本 SQL 命令中是不包含控制命令的,例如 IF 和 WHILE。 C 語言為程序型語言,其將命令依序寫出,整體表達出目的,而 SQL 語言則為非程序語言,僅僅用一命令便結束,依靠單一命令達成目的。通常 SQL 嵌入在程序型語言中,利用程序型語言的控制命令即可。
- Schema 命名空間
-
View 檢視表 = Table 資料表
-
Index 索引
-
Procedure 程序
-
Function 函式
-
Synonym 別名
-
Trigger
-
Sequence
- '' singlequote, 單引號
此符號用來包住 '字串'、'間隔常數'、'日期時間'...等常數。
倘若使用保留字命名物件時,要使用特殊符號。
-
[] square brackets, 方括號
-
"" doublequote, 雙引號
-
‘’ backquote, 反單引號
-
LOB, Large Object
-
Image
-
ENUM
-
SET
一般資料庫不區分大寫小,mySQL 則可做區別,但是得設定 BINARY。 另外,可以指定資料顯示時的位數,不受限於資料的實際位數。
+----------+---------+---------+-----------------+
| Data Type | Byte | Decimal | unpacked/packed |
+-----------+---------+---------+-----------------+
| INT | 4 | x | |
+-----------+---------+---------+-----------------+
| TINYINT | 1 | | |
+-----------+---------+---------+-----------------+
| SMALLINT | 2 | | |
+-----------+---------+---------+-----------------+
| BIGINT | 8 | | |
+-----------+---------+---------+-----------------+
| DEC | x | v | |
+-----------+---------+---------+-----------------+
| NUMERIC | | v | version 5.3 |
+-----------+---------+---------+-----------------+
註解: unpacked 是指以字串儲存精準數值,每一字元表示一位數。
對 SQLite 而言,行 column 的資料型別設定並非絕對的,即使不設定資料型別也無妨!這個特點稱為型別親和性 Affinity。
然而在資料庫中,進行內部最佳化,建議盡可能在定義資料表時設定行的資料型別。
+--------+------+
| TEXT | 字串 |
+--------+------+
|Numeric | 數值 |
+--------+------+
| INTEGER | 整數 |
+--------+------+
| REAL | 浮點數 |
+--------+------+
| NONE | 不指定 |
+--------+------+