-
DBMS:數據庫管理系統
- 是由多個程序構成的,專門用來管理大量數據的計算機系統
-
服務端
- Server:提供數據存儲、檢索、計算等服務的網絡程序+系統服務
- Notifier:通知應用
-
-
管理端
- Workbench:英文、圖形化的數據庫管理客戶端
- Navicat:中文、圖形化的。。。
- Shell:英文、命令行字符界面
- phpAdmin:具備管理MySQL數據庫的功能=BS架構
-
開發工具包
- Connector/J:Java使用的數據庫驅動(連接工具)
- 文檔
- 示例代碼
-
數據庫分類
-
關係型數據庫
- MySQl
- Oracle
- SQL Server
- 。。。
- 用來存放規則的數據,通常要支持事務(在商業交易環境中,通過事務可以保證數據的正確性)
- 能夠支持的數據量,事務數據百萬級、非事務型數據千萬
- 性能和速度、併發能力:一般
-
NoSQL(非關係型數據庫)
- Redis:Key-Value:內存 速度非常塊
- Hbase:Key-Value:大數據存儲
- MongDB:文檔型(JSON對象):千萬級,速度比較快
- 。。。
-
關係型數據庫
-
設計數據表
-
數據分析
- 識別數據對象(一開始是粗略的),如學生信息
-
分解數據屬性
-
最好的方法是討論
- 和項目組內部的人討論
- 和客戶討論(在需求調研時詳細詢問)
- 分解結果詳細記錄,準備進一步識別數據對象和第二層分解
-
分解時注意的細節
-
類型是什麼
- 用簡單類型能否表示
- 如果是複雜類型的話,初步分解
- 長度
- 隨時間或環境變化是否會改變
- 值的取值範圍
- 會不會有無值的情況
- 默認值是什麼
-
類型是什麼
-
最好的方法是討論
- 分解屬性和識別數據對象需要反覆多次
-
創建表
-
命名規範
- 表明及字段名全部小寫,單數使用單數,單詞之間用_分隔
- 根據需求合理設置字段屬性
-
命名規範
-
填充數據進行功能驗證
- 能夠方便的查詢出所需要的數據結果(連接多個表才能得到的最複雜數據)
-
填充更多數據進行性能驗證
- 填充指定量的數據,並且注意數據的質量,驗證增刪改查的性能
- 數據的基本字段
-
數據分析
- 自增:向表中插入新數據時,不需插入,而是會自動生成,規則是本列最大值+1(通常)
-
主鍵用來唯一表示一條數據
- 通常使用id充當。如果數據字段中有一個字段可以確保唯一性,並且是整數或比較短的字段串也可以充當主鍵
- 有一些表沒有id,也可以使用2個表甚至更多個列組合作爲主鍵,只要能夠保證組合的唯一性即可
- 主鍵一定有索引功能的。通過主鍵查找數據速度很快。
-
邏輯刪除
- 業務上已經不需要該數據,系統中也看不到,但數據庫中並沒有刪除它
- 系統在篩選數據時故意把它們排除掉了(status!=-2)
-
SQL語句
-
查詢所有數據(返回所有列)
- Select * From 表名
-
返回指定列
- Select 列名,列名,列名 From 表名(如果列名有關鍵字衝突,則需要用``包裹:ESC下邊的符號)
-
插入數據
- insert into 表名 (列名,列名,列名)Value(值,值,值)
-
查詢條件
-
Select * From 表名 Where 邏輯表達式
- status <>=-2:不等於-2
- status !=-2:不等於-2
- status > -2:大於-2
-
Select * From 表名 Where 邏輯表達式
-
邏輯運算符
- AND
- OR
- 需要時加()
-
更新數據
-
Update 表名
-
Set 列名=值,
-
列名=值,
- 列名=值
-
列名=值,
-
Set 列名=值,
- Where 邏輯表達式
-
Update 表名
-
刪除數據(刪除後無法恢復)
- Delete From 表名
- Where 邏輯表達式
-
IN列表
- Select * From 表名 Where id in(3,4,5,6,7)
-
查詢數據條數
- Select Count(1) AS 列的別名 From 表名 Where 邏輯表達式
-
查詢所有數據(返回所有列)
-
JDBC
- JDBC是JDK中連接和操作數據庫的類的統稱
-
它包含Java.sql包下的多個類和接口,定義了:
- Connection:數據庫連接
- DriverManager:數據庫驅動管理
- Statement:定義了SQL語句和執行SQL語句的方法
- ResultSet:數據查詢結果集
- 上面的JDBC類或接口並沒有提供完整數據庫連接和操作能力
- JDBC的具體實現是由各個數據庫廠商提供的,通常在安裝數據時,可以獲取到這個數據庫的JDBC實現(驅動包)
-
這樣設計的原因
- 當時SUN沒有數據庫產品,主流的數據庫都是其他廠商的產品
- JDK爲了統一數據庫訪問的代碼,定義了JDBC的基本類和接口,由數據庫廠商實現(如果不提供統一的數據庫訪問類,則會導致數據庫訪問的類變得混亂,沒有標準)
- 寫代碼時,不會在代碼中直接使用廠商提供的類,而是使用JDK中的類,這就導致廠商提供的類不會被加載
- 所以就要使用Class.forName("驅動類的名字"),驅動類加載時,靜態初始化代碼就會執行,驅動相關的信息就可以註冊到DroverMannager等類中
- JDBC流程
-
@WebServlet("/JDBC")
- 這一個註解,目標是取代web.xml中的<servlet>和<swevlet-mapping>配置
- 使用註解有利也有弊,早起Servlet不支持註解,後來(Servlet3)才支持大量使用註解