Skip to content

QueenieCplusplus/SQL_Concepts

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

48 Commits
 
 

Repository files navigation

SQL Concepts

資料庫概念

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

MySQL 特有資料型別

  • 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

對 SQLite 而言,行 column 的資料型別設定並非絕對的,即使不設定資料型別也無妨!這個特點稱為型別親和性 Affinity。

然而在資料庫中,進行內部最佳化,建議盡可能在定義資料表時設定行的資料型別。

 +--------+------+
 |   TEXT  |  字串 |
 +--------+------+
 |Numeric |  數值 |
 +--------+------+
 | INTEGER |  整數 |
 +--------+------+
 |  REAL  | 浮點數 |
 +--------+------+
 |  NONE  | 不指定 | 
 +--------+------+