Java || 基礎 隨筆
阿新 • • 發佈:2020-11-19
資料庫設計的正規化
- 概念:設計資料庫時,需要遵循的一些規範,要遵循後邊的正規化要求,必須遵循前邊的所有正規化要求。
- 設計關係資料庫時,遵從不同的規範要求,設計出合理的關係型資料庫,這些不同的規範要求被稱為不同的正規化,各種正規化呈遞次規範,越高的正規化資料庫榮冗餘越小
- 目前關係資料庫有六種正規化
- 1NF、2NF、3NF、BCNF、4NF、5NF
- 分類
- 1、第一正規化1NF :每一列都是不可分割的原子資料項
- 2、第二正規化2NF:在第一正規化的基礎上,非碼屬性必須完全依賴於候選碼(在1NF基礎上消除非主屬性對主碼的部分函式依賴)
- 函式依賴:如果通過A屬性(屬性組)的值,可以確定唯一B屬性的值。則稱B依賴於A
- 完全函式依賴:如果A是一個屬性組,則B屬性值的確定需要依賴於A屬性組中所有的屬性值
- 部分函式依賴:如果A是一個屬性組,則B屬性值的確定需要依賴於A屬性組中某一些值即可。
- 傳遞引數依賴:A --> B B --> C
- 碼:如果在一張表中,一個屬性或屬性組,被其他所有屬性所完全依賴,則稱這個屬性(屬性組)為該表的碼
- 3、第三正規化3NF:在2NF基礎上,任何非主屬性不依賴於其他非主屬性(在2NF基礎上消除傳遞依賴)
例:
學生資訊表
- 每一列都不可再分割
- 第一正規化設計出來的表存在的問題
- 存在非常嚴重的資料冗餘(重複)
- 資料新增存在問題:新增一個新開設的系和系主任時,資料不合法
- 資料刪除存在問題:張無忌同學畢業了,刪除資料會將系的資料一起刪除
- 第一正規化設計出來的表存在的問題
- 第二正規化:拆分表
資料庫的備份和還原
- 命令列
- 語法
- 備份:mysqldump -u使用者名稱 -p密碼 資料庫名稱 > 儲存的路徑
- 還原
- 登陸資料庫、建立資料庫、使用資料庫、執行檔案:source 檔案路徑
- 語法
- 圖形化
多表查詢
- 查詢語法:
- select 列名列表 from 表名列表 where .....
- 笛卡爾積
- 有兩個集合A B 取這兩個集合的所有組成情況
- 要完成多表查詢,需要消除無用的資料
- 分類
- 內連線查詢
- where
- inner join
- join
- 外連線查詢
- left join
- rigth join
- 子查詢
- 子查詢的結果是單行單列的
- 子查詢的結果是多行單列的
- 子查詢的結果是多行多列的
- 內連線查詢
事物
- 事物的基本介紹
- 概念:
- 如果一個包含多個步驟的業務操作,被事務管理,這些操作要麼同時成功,要麼同時失敗。
- 例:銀行轉賬
- 操作
- 開啟(臨時視窗) : start transaction
- 回滾 rollback
- 提交 commit
- 如果一個包含多個步驟的業務操作,被事務管理,這些操作要麼同時成功,要麼同時失敗。
- mysql資料庫中事務預設自動提交
- 事務提交的兩種方式
- 自動提交
- mysql就是自動提交
- 一條DML(增刪改)會自動提交一條語句
- 手動提交
- oracle預設手動提交
- 需要先開啟事務,再提交
- 自動提交
- 修改事務的預設提交方式
- 檢視事務的預設提交方式
- select @@autocommit; -- 1代表自動提交 0代表手動提交
- 檢視事務的預設提交方式
- 事務提交的兩種方式
- 事務的四大特性
- 原子性
- 不可分割的最小操作單位,要麼同時成功,要麼同時失敗
- 永續性
- 隔離性
- 多個事務之間相互獨立(真實情況下是相互影響)
- 一致性
- 事務操作前後,資料總量不變
- 原子性
- 事務的隔離級別
- 概念:多個事務之間隔離的,相互獨立的。。但是如果多個事務操作同一批資料,則會引發一些問題,設定不同的隔離級別就可以解決這些問題
- 存在問題
- 髒讀:一個事務,讀取到另一個事務中沒有提交的資料
- 不可重複讀(虛讀):在同一個事務中,兩次讀取到的資料不一樣
- 幻讀:一個事務操作DML資料表中所有記錄,另一個事務添加了一條資料,則第一個事務查詢不到自己的修改
- 隔離級別
- read uncommitted:讀未讀取(產生的問題:髒讀、不可重複讀、幻讀)
- read committed:讀已提交(產生的問題:不可重複讀、幻讀)
- repeatable read:可重複讀(產生問題:幻讀)【mysql預設】
- serializable:序列化(可以解決所有的問題)
- ⚠️隔離級別從小到大安全性越來越高,但是效率越來越低
- 資料庫查詢隔離級別:select @@tx_isolation
- 資料庫設定隔離級別:set global transaction isolation level 級別字串
- 概念:
DCL
-
SQL分類
-
DDL:操作資料庫和表的
-
DML :增刪改表中資料
-
DQL:查詢表中資料
-
DCL:管理使用者,授權
-
管理使用者
-
查詢使用者
-- 1、切換到mysql資料庫
use mysql ;
-- 2、查詢user表
select * from user ;
*萬用字元 % :表示可以在任意主機登陸該使用者
-- 建立使用者
create user 'zhangsan'@'localhost' identified by '123' ;
-
刪除使用者
drop user '使用者名稱'@'主機名' ;
-
修改使用者密碼
update user set password=password('新密碼') where user ='使用者名稱' ;
set password for '使用者名稱'@'主機名' = password('新密碼') ;
*mysql中忘記了root使用者的密碼
cmd : net stop mysql ;
無驗證方式啟動mysql服務 mysqld --skpi-grant-tables
-
-
查詢許可權:show grants for '使用者名稱'@'主機名'
-
授予許可權 grant 許可權列表 on 資料庫.表名 to '使用者名稱'@'主機名' ;
-
撤銷許可權 revoke 許可權列表 on 資料庫.表名 from '使用者名稱'@'主機名' ;
-
-