介紹資料庫- # 資料存取的方式 1. 實體紙本-資料櫃 2. 電子試算表-EXCEL 3. 資料庫 # 資料系統的發展 1. 人工作業-紙本方式存在,人工處理 (資料多時不易尋找) 2. 循序儲存-磁帶方式儲存(速度慢) 3. 檔案系統-一般電腦,儲存在硬碟中(資料分別儲存 ) 4. 資料庫管理系統(DBMS) # 檔案資料系統常見的問題 * 資料重複-相同資料存在不同檔案中 * 資料不一致-相同資料存在不同檔案中但內容不同 * 資料存取不易-不同檔案格式,分散在不同地方 * 資料隔離-格式不同+分散,導致檔案不易整合 * 資料完整性-資料有檢查條件,且條件寫在程式中,ex:金額大於1000 * 資料更新一致性-部分資料更新失敗導致 * 多人存取異常-多使用者更改資料導致資料不一致 * 安全性問題-系統當機、硬體損壞、惡意破壞等 __________________________________________________________ ![](https://hackmd.io/_uploads/B1OkW7pYn.png) # 資料庫管理系統的好處 1. 定義資料儲存的結構 2. 提供資料維護的機制 3. 確保資料的安全 4. 提供多人使用下,同時存取的控制機制 # 資料庫系統的使用者 1. 資料庫管理者-等於資料庫總管 2. 應用程式設計者-透過DML與資料庫互動(寫成語與資料庫互動) 3. 專業使用者-撰寫不同於傳統的特殊資料庫應用程式(資料庫分析師等) 4. 一般使用者-使用他人寫好的程式與資料庫互動 流行開發技術參考:https://roadmap.sh/aspnet-core # 關聯式資料庫(SQL)與非關聯資料庫(NoSQL) 主要差異在於資料的儲存和整理方式。 非關聯資料庫不會以規則式表格形式儲存資料。而是將資料儲存為個別且未連結的檔案,並可用於複雜的非結構化資料類型,例如文件或互動式多媒體檔案。 ## SQL常見的資料庫廠商 * SQL Server * MySQL(屬於Oracle) * MariaDB * Oracle(付費) * PostgreSQL(免費,號稱比Oracle快) MariaDB小故事:MySQL原本是開源專案, 被Oracle買走後原本的人就不高興,做了備份,那備份出來的就是MariaDB,所以MariaDB跟MySQL有80%像,但之後會越來越不像,因為被Oracle買走了 這就是他們之間的小故事 ## NoSQL常見資料庫廠商 * MongoDB * Amazon DynamoDB * Redis(記憶體) * ElasticSearch 流行開發技術參考:https://roadmap.sh/aspnet-core ## SQL簡介 Structured Query Language(SQL),結構化查詢語言,在1970年代初,由IBM公司開發,用於存取資料庫內的資料。 **資料定義語言(DDL):** 用來產生、修改、刪除表格、索引等 **資料處理語言(DML):** 用來新增、修改、刪除資料等 **資料查詢語言(DQL) :** 使用 SELECT 敘述來查詢資料庫 **資料控制語言(DCL):** 用來管理資料庫或資料表的授權使用等 **交易控制語言 Transaction Control Language:** 多人使用環境的交易控制 PS:不同資料庫管理系統廠商的SQL語法會稍微不同,本課程使用Mircrosoft SQL server的Transact-SQL,(T-SQL) ## 實作 打開SQLServer 2019設定工具-SQLServer服務-MSSQLserver 狀態執行中,表示資料庫開啟中 打開SSMS-windows驗證登入 ### SQLserver與Database SQLserver是一種資料庫管理系統,所以當SQLserver啟動時會啟動一個Database Server,這個Serever裡面可以存放多個Database 不同的應用程式會使用不同得Database #### 新增資料庫可以分為兩種: (方法1) * 資料庫>右鍵>新增資料庫>資料庫名稱>確定 (方法2) ``` * CREATE DATABASE <DB_Name>; ``` 註: 1. SQL語法上,習慣在使用保留關鍵字時使用大寫。不過在MSSQL不區分大小寫 2. 使用中括號可以使用保留關鍵字命名,但**不建議**使用 4. 資料庫命名可使用底線,但不可使用空格 5. 執行後須重新整理,資料庫清單才會改變 6. 資料庫命名不可重複 (實際操作) #### 使用某資料庫 方法一 * 左上角選單選擇 方法二 ` USE <DB_Name>例:USE Student;` 註:可觀察左上角選單查看目前使用的資料庫 #### 移除某資料庫 方法一 * 滑鼠對著要刪除的資料庫右鍵 方法二 `* DROP DATABASE <DB_Name>;` 註:刪除時SSMS會自動檢查Databas是否有連線,有連線則無法刪除 若想刪除已連線資料庫>打勾[關閉現有的連線] #### SQL Server的註解 程式前面加上兩個-- 例:-- DROP DATABASE <DB_Name>; #### 顯示行數 上方工具-選項-文字編輯器-Transact-SQL-行號打勾 ### 資料表(Tables) #### 簡介: 資料表又稱表格,原文為Tables。 關聯式資料庫中,資料庫裡通常會有很多資料表。 資料表內的資料會有一致的格式。 資料庫與資料庫之間的資料表是互不相通的 ### 資料表內容: 1. 直欄(Column): * 具有相同的資料型態 * 儲存同類型的資料內容 2. 橫列(Row): * 由1個以上的值欗所組成的一筆資料 * SQL查詢索回傳的資料單位 3. 欄位(Field): * 直欄與橫列交會的地方 * 儲存資料的地方 4. 主鍵(Primary Key): * 用來識別每一橫列的欄位,其特性: * 具有唯一性(Unique)且不可為空值(Not Null) 5. 空值(Null): * 欄位沒有儲存資料時稱為空值 6. 外來鍵(Foreign Key): * 用來表示資料表之間的關係 * 一定會牽扯到兩個表格,一個稱為父表、一個稱為子表 ### 資料型別(Data Type) 在同一個值欄內的值,資料必須一致 #### SQL server常見的資料型別簡介 * 字元字串: CHAR、VARCHAR、TEXT * 萬國碼字元字串(Unicode character strings): NCHAR、NVARCHAR、NTEXT * 二進位字串 BINARY、VARBINARY、IMAGE * 精確數值: INT、BIGINT、SMALLINT、TINYINT、NUMERIC * 日期和時間: DATE、TIME、DATETIME、DATETIME2、SMALLDATETIME * 近似值(又稱為浮點數): FLOAT、REAL #### 字串相關的資料型別 ##### 字元字串 * char(n) n必須是1到8000的值,不足自動補空格 * varchar(n|max) n可以是1到8000之間的值,max表示儲存體大小上限,上限2GB 多了var前置英文字,表示儲存資料的長度是否固定。 (範例) Value char(4) Varchar(4) ##### 萬國碼字元字串 * nchar(n)   n必須是1到4000的值,不足自動補空格 * nvarchar(n|max)  n可以是1到4000之間的值,max表示儲存體大小上限,上限2GB 差別與上者相同,但多了一個n, 若資料不限英文,盡量都以n開頭 註:在資料庫中每個英文字,數字或符號的儲存空間需要1Byte,非英文或符號則需要2Byte來儲存 儲存單位排序:Bit->Byte->KB->MB->GB->TB->PB ##### 二進位字串 主要用來保留圖片、語音或混合媒體等資料 * BINARY(n) n必須是1到8000的值,不足自動補空格 * VARBINARY(n|max) n可以是1到8000之間的值,max表示儲存體大小上限,上限2GB * IMAGE 官網不建議使用,未來版本中刪除 ![](https://hackmd.io/_uploads/SkGpvies2.png) 註:超過2GB的圖可存在本機,資料庫存路徑 #### 數字相關的資料型態 ##### 精確數值 INT TINYINT