1. 程式人生 > 實用技巧 >Java || 基礎 隨筆

Java || 基礎 隨筆

資料庫設計的正規化

  • 概念:設計資料庫時,需要遵循的一些規範,要遵循後邊的正規化要求,必須遵循前邊的所有正規化要求。
    • 設計關係資料庫時,遵從不同的規範要求,設計出合理的關係型資料庫,這些不同的規範要求被稱為不同的正規化,各種正規化呈遞次規範,越高的正規化資料庫榮冗餘越小
    • 目前關係資料庫有六種正規化
      • 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 '使用者名稱'@'主機名' ;