前言
? ? ? ? "<數據庫原理及應用>(MySQL版)".以下稱為"本書"中2.1節和2.2節第一部分內容
引入
? ? ? ? 本書P40:SQL(Structure Query Language結構化查詢語言)是一種在關系數據庫中定義和操縱數據的標準語言,是用戶和數據庫之間進行交流的接口.
? ? ? ? ---SQL是一種語言,是一種工具,值得欣慰的是如何實現它不用寫應用的程序員去關心,會用即可
MySQL8.0安裝的兩個細節
? ? ? ? 要操作SQL語言,先安裝一個MySQL.某度搜索"MySQL8.0安裝",根據其步驟實操有兩個地方要注意:
? ? ? 1.在最后finish階段,"Starting the server 失敗"
? ? ? ? 解決方法:
? ? ? ? ---不要關閉錯誤頁面:出現紅色感嘆號時,保持安裝界面打開,不要點擊取消或關閉按鈕。
? ? ? ? ---打開服務管理界面:
????????????????右鍵點擊“計算機”(或“此電腦”),選擇“管理”。
????????????????在左側導航欄中依次展開“服務和應用程序”→“服務”,找到名稱為“MySQL80”(不同版本可能略有差異,通常以MySQL開頭)的服務。
? ? ? ? ---配置MySQL服務屬性:?
????????????????右鍵點擊“MySQL80”服務,選擇“屬性”。
????????????????在彈出的窗口中切換到“登錄”選項卡。
????????????????勾選“允許服務與桌面交互”,點擊“應用”保存設置
????????重新執行安裝:返回MySQL安裝界面,點擊“Execute”按鈕重新嘗試安裝,此時“Starting the server”步驟大概率會成功
注:內容為轉載,原帖MySQL安裝時Starting the server 失敗的問題_mysql8.0安裝后starting the server不成功-CSDN博客
? ? ? ? 2.首次登陸mysql的問題
? ? ? ? 按照常規方法在控制臺輸入:mysql -u root -p,老是顯示錯誤登陸不成功.原因是此時未設置密碼---登陸密碼和安裝mysql輸入的密碼不一樣.第一次登陸方法:mysql -u root,回車即可登陸.進入sql后可以修改登陸密碼
2.1 SQL語言介紹
? ? ? ? SQL是一種國際標準
2.1.1SQL數據庫的體系結構
圖2-1 SQL數據庫的體系結構是圖1-4的具體表達,在"模式"中添加了索引,內模式有了具體表示.
使用SQL的關系數據庫的特點,主要有兩點:
1.SQL用戶可以是應用程序,也可以是終端用戶.它可以獨立使用,也可以被嵌入宿主語言如C++,Java等.
2.視圖是一個虛表.
? ? ? ? ---前面提到過"視圖"是一個搜索請求,它的結果是一張表.
其余內容了解即可
2.1.2 SQL的特點,是一些文字描述
2.1.3 SQL語言的組成
? ? ? ? 數據定義語言DDL,數據操縱語言DML和數據控制語言DCL
2.2 數據定義
? ? ? ? 對數據的概念回顧:前面提到過在數據庫中,把"表"看作是數據庫的基本數據.而在"表"定義時,"屬性"是表的基本單位.綜合來說,數據庫的基本單位是"屬性",利于后面的"數據類型"的理解.
2.2.1數據庫的定義和刪除
數據庫的數據結構分析
? ? ? ? 本書P42原話:數據庫是存放數據的容器,在設計一個應用系統時必須先設計數據庫.在MySQL中一個數據庫服務器可以包含多個數據庫,每個數據庫存放在以數據庫名字命名的文件夾中,用來存放該數據庫中的各種表數據文件.
? ? ? ? ---這段話有一定信息量,數據庫服務器→數據庫→表數據文件,簡單表示如下圖:
? ? ? ? 筆者寫這個的目的是嘗試站在高級語言描述:數據庫的數據結構.以加深對數據庫的理解
/*以下為偽代碼*/
//數據庫服務器類型定義
struct DataServer{vector<DataBase> dbs;
}//數據庫類型定義
struct DataBase{vector<Table> tbs;Folder fdr; //文件夾對象
}//表類型定義
struct Table{vector<Attribute> abs; //屬性的動態數組
}
? ? ? ? 說明如下:
? ? ? ? 1.根據"每個數據庫都存放在以數據庫名字命名的文件夾中(本書原話)",定義一個Folder類型表示數據庫對象包含一個Folder對象(但沒有去實現它).實現的效果可以類比Windows文件夾的效果---再深入一點,文件夾實際上是一個矩陣圖形類對象(筆者之前分析過),從效果上來說,相當于未實現的前端.
? ? ? ? 注意:每個表是單獨的數據文件,在使用mysql的一些IDE中,常常能看見"名稱.表名"格式的數據.例如"1.stu"---表示寫了一個stu類型的表,并命名為1的數據文件.如果按照該格式建立若干表,則表示有若干個數據文件.表和數據文件是一一對應關系.這點很方便操作,數據物理獨立性的表現.
? ? ? ? 2.屬性類型Attribute是一個"數據類型的類型",Java中有反射機制似乎能表達它,但C++沒有(筆者也不知道底層是怎么實現,所以是偽代碼).在<深入理解計算機系統>這本書中有提到,簡單想一想:底層有專門的區域來表示數據類型,用指針指向該區域(表示第一個類型),并計算每個類型占用空間,然后指針偏移所占空間的大小,指向下一個類型(第二個類型)---底層都是二進制數,支持指針
? ? ? ? 回到前面的問題:數據庫的數據結構是什么?類似于高度為3的一棵樹.為什么高度是3,設計成4可不可以?對應著圖2-1把"表空間"單獨列為1層.(這段屬于筆者個人看法,有待商榷)
=============================內容分割線↓===================================
? ? ? ? 目前為止,和樹相關的幾種數據結構:1文件樹(Linux),2對象樹(Qt),3身份證和4數據庫的樹.
????????這些數據結構有一些區別:3和4并不算"樹".只是他們的樣子長得像樹.其中身份證的數據結構歸于散列表,要先設計散列算法,根據算法設定了層高.
? ? ? ? 1,2是真正意義的"樹",他們支持遞歸(遞進).樹還有二叉樹,哈夫曼樹等數據結構.
? ? ? ? 3,4可稱為"類樹"(類似于樹的數據結構).3,4的數據結構有細微差別,筆者以后做個專題分析.
=============================內容分割線↑===================================
數據庫的三個指令
? ? ? ? 本書P43:
????????建立數據庫? ? ? ? CREATE DATABASE 數據庫名
? ? ? ? 選擇數據庫? ? ? ? ?USE 數據庫名
? ? ? ? 刪除數據庫? ? ? ? ? DROP?DATABASE 數據庫名
小結
? ? ? ? 數據庫數據結構的分析,數據庫定義和刪除的指令.