java自學之路-day18
數據庫
數據庫
概念
l 對於一串數據修改其中的一條數據
l 如果用io流就需要全盤讀寫 然後找到其中的一行 進行修改
l 或者使用數組進行修改
l 這樣太復雜 效率慢 所以需要引用數據庫
l 數據庫本質是一個文件系統 可以看做是一個具有很好的處理數據能力的容器 和集合 數組 都一樣
l 裏面有嚴格的數據存儲格式
l 數據庫管理系統是用一個軟件管理數據庫
l 常見的數據庫管理系統
- MYSQL 開源免費 瑞典的公司開發 sun公司收購 Oracle收購了sun MYSQL6.x之後收費 中小企業使用
- Oracle 收費的數據庫 Oracle的公司的產品 大型公司使用
- DB2 IBM 收費 常用在銀行系統中
- SQLServer Microsoft公司 收費 c# .net語言使用
- Sybase 已經淡出歷史舞臺 提供了一個專業數據建模工具PowerDesigner
- SQLite 嵌入式數據庫 用在手機端
- Java常用 MYSQL 和Oracle,其他也可以用
數據庫和管理系統
l MYSQL中可以有多個數據庫 數據庫是真正存儲數據的地方
l 兩者的關系
- 客戶端面對數據庫管理系統
- 數據庫管理系統 操作數據庫
- 數據庫操作表
l MySQL數據庫是一個服務器 存儲數據庫的倉庫
l MySQL數據庫中有很多數據庫 MySql數據庫是一個總稱
l 要使用數據庫就需要創建自己的數據庫
l 而存儲數據需要在數據庫中建立各種數據表 數據是存儲在表中的
數據庫表
l 數據庫中以表為單位存儲數據
l 表似於java類
l 表中字段類似於類中屬性
l 表中每一條數據類似於對象
l 圖
表數據
l 用戶表
l 每一個表表示每一個事物也就是一個類
l 每一列表示類中每一個屬性
l 每一行也就是一條數據表示類中每一個對象
MySql數據庫
安裝MySql
- MYSQL6.x之後收費
- 雙擊5.5安裝包 next
- 選擇自定義安裝
- 手動選擇安裝位置
- 兩個安裝路徑
a) MySql Server
b) Server data files
- 點擊next就可以安裝了
- 安裝完後 再次點擊next
- 然後打上勾 Lanch。。。 運行配置向導
- 點擊finish就可以了
- 開始配置向導
- 選擇第一個 精細配置
- 選擇第一個 開發者電腦
- 選擇第一個 多功能功能數據庫
- MySql引擎存儲位置不要更改
- 選擇第三個 自定義連接數上限
- 啟用 tcp/ip網絡協議 默認端口號
- 選擇第三個默認字符集 更改為utf-8
- 安裝windows服務叫MySql
導入環境變量
- 設置密碼
- 點擊Execute
- 安裝完成
- 在windows服務中有 MySql服務 可以停止或開啟服務 以及自動開啟或手動開啟
- 360網絡連接中或出現MySql服務程序
- 命令行開啟服務
MySql在系統服務中
MySql登錄
l 命令行 敲入mysql –uroot –p123
l 賬號和密碼
l 也可以分開寫賬戶和密碼
l 登錄成功
l 密碼錯誤
l 賬戶錯誤
SQLYog
l 圖形化開發工具
l 免安裝
Sql語言
概述
l 數據庫不能用java語言
l 與數據庫交互 需要使用數據庫的SQL語句
l 是數據庫中的代碼
l 是一種數據庫查詢和程序設計語言
l 用於存取數據查詢,更新和管理關系數據庫系統
l 創建數據庫 創建數據表 向數據庫添加數據信息都需要使用SQL語句
l 適用於所有數據庫
SQL語句
l 數據定義語言 DDL
定義數據庫對象 數據庫 表,列
關鍵字 creat alter drop 創建 修改 刪除
l 數據操作語言 DML
對數據庫數據更新操作
關鍵字 insert delete update
l 數據控制語言DCL
用於分配訪問權限和安全級別 還能創建用戶
l 數據查詢語言DQL
用來查詢數據庫中標的記錄
關鍵字 select from where
SQL通用語法
l SQL語句可以單行或多行書寫 以分號結尾
l 可使用空格或縮進來增強語句的可讀性
l 不區分大小寫
l 可以使用/**/來註釋
l 數據類型
- int
- double
- varchar 可變字符
- date 日期類型 只有年月日沒有時分秒
- 其他還有很多
數據庫操作
l 創建數據庫
create dataabase 數據庫名;
create database 數據庫名 character set字符集;
由於安裝時以改為默認字符集 所以不用指定字符集了
l 顯示數據庫
show databases;
l 刪除數據庫
drop database 數據庫名;
l 操作沒有確認項
創建表操作
l 格式
l 約束
限制列名寫什麽數據
- 主鍵約束
- 非空約束
- 唯一約束
- 外鍵約束
SQL代碼的保存
l 可以正常保存 Ctrl+s
l 文件後綴 .sql
l 文本文件
l 導入
Ctrl+o
創建表示例
l 圖
主鍵約束
l 唯一 非空
l 不具備任何含義 只用來標識 生活中沒有的 只有系統中有
l private key 列的後面加入這個關鍵字
l 在表的最後指定主鍵 primary key(id)
l AUTO_INCREMENT可以讓主鍵自動增長 來確保唯一性和非空性
l 查看表
Show table 表名 查看所有表
Desc 表名 查看表結構
l 刪除表
Drop表名
修改表結構
l 添加列
- Alter table 表名 add 列名 數據類型 約束
l 修改列
- 類型修改要註意
- Alter table 表名 modify 列名 數據類型 約束
l 修改列名
- Alter table 表名 change 舊列名 新列名 數據類型 約束
l 刪除列
- Alter table 表名 drop 列名
l 修改表名
- Rename table 表名 to 新名
l 修改表字符集
Alter table 表名 character set 字符集
數據表添加數據
l Insert into 表名(列名1,列名2,列名3) values(值1,值2,值3)
- 註意列名表名問題 不要寫錯
- 對應問題 列和值個數要對應
- 沒有字符串概念 字符都用單引號‘’
- 數字可以不加單引號
l Insert into 表名 (列名)values(值)
- 沒有主鍵
- 列名不寫主鍵 值也不用寫主鍵
l Insert into 表名 values(值)
- 所有值都給出
- 不用寫列名
- 但是值必須寫夠
l 批量寫入
l Insert into 表名(列名1,列名2,列名3) values(值1,值2,值3),(值1,值2,值3),(值1,值2,值3),
- 批量寫入數據
- 值寫多個
l 如果在軟件中把自動遞增的id刪除一個,再添加一個,id還是在刪除的那個id基礎上自動遞增
更新數據
l Update 表名 set 列1=值1,列2=值2 where 條件
- 條件 id
- 條件的寫法
等於= 小於 < 大於 > 小於等於<=
與或非 and or not
Id In(1,3,4,5) 包含
Id not in(1) 不包含
刪除數據
l Delete from 表名 where 條件
- 不清空一條一條的刪除 不清空AUTO_INCREMENT記錄數 下一次增加還會在原來基礎上繼續遞增
l Truncate table 表名 摧毀表
- 直接將表刪除
- 重新建表
- AUTO_INCREMENT將置為0 從新開始
l 查詢表中內容
l MySql編碼方式是UTF-8 windows是GBk 所以會出現中文亂碼
l 改變指定列的編碼方式
l 其他
數據查詢
數據表和測試數據準備
基本查詢
l 查詢定列的數據
Select 列名1,列名2 from 表名
l 查詢所有列
Select * from表名
l 去掉重復記錄
Select Disctinct 列名 from 表名
l 查詢並臨時重新命名列的名字
Select 列名 as ‘要修改的名字’ from 表名
後面加 as 修改後的名字
或者直接加修改後的名字
l 查詢中直接運算
- Select 列名 運算符 數字 as‘’ from表名
- 加as 是因為運算後列名就改變了
條件查詢
l 滿足條件查詢 不滿足不操作
l 比較運算符
l 邏輯運算符
l 查詢某一個名字的數據
l 大於
l And
l Between and
l Or
l In
l Like 模糊查詢
- 開頭有小米
- 開頭結尾都有小米
- 查詢幾個字符 幾個下劃線就表示幾個字符
l 查詢不為空
排序查詢
l 升序
Select * from 表名Order by 列名 asc
Asc可以不寫
l 降序
Select * from 表名Order by 列名 desc
l 查詢指定列 在進行降序排列
不能對中文進行排序 結果不可預知
聚合函數查詢(縱向查詢)
概念
l 之前都是橫向查詢
l 有時需要計算 需要縱向查詢
l 這時需要使用聚合函數 將每一列進行計算然後返回一個單一的值
示例
l Count
l Sum
l Avg
l Max min
l 混合計算
l 分組查詢
- 把重復內容進行分組 單獨進行聚合計算
- 過濾pname
- 過濾pname
- 過濾sum
Having用於分組後過濾
分組後不能用Where
命令行亂碼問題
java自學之路-day18