1. 程式人生 > 其它 >mysql快取問題 相關引數的檢視

mysql快取問題 相關引數的檢視

MYSQL高階

  • 掌握約束的使用
  • 掌握表關係及建表原則
  • 重點掌握多表查詢操作
  • 掌握事務操作

一、約束

1.1 概念

  • 約束是作用於表中列上的規則,用於限制加入表的資料

    例如:我們可以給id列加約束,讓其值不能重複,不能為null值。

  • 約束的存在保證了資料庫中資料的正確性、有效性和完整性

    新增約束可以在新增資料的時候就限制不正確的資料,年齡是3000,數學成績是-5分這樣無效的資料,繼而保障資料的完整性。

1.2 分類

  • 非空約束: 關鍵字是 NOT NULL

    保證列中所有的資料不能有null值。

  • 唯一約束:關鍵字是 UNIQUE

    保證列中所有資料各不相同。

  • 主鍵約束: 關鍵字是 PRIMARY KEY

    主鍵是一行資料的唯一標識,要求非空且唯一。一般我們都會給沒張表新增一個主鍵列用來唯一標識資料。

  • 檢查約束: 關鍵字是 CHECK

    保證列中的值滿足某一條件。

  • 預設約束: 關鍵字是 DEFAULT

    儲存資料時,未指定值則採用預設值。

  • 外來鍵約束: 關鍵字是 FOREIGN KEY

    外來鍵用來讓兩個表的資料之間建立連結,保證資料的一致性和完整性。

1.3 非空約束

  • 語法

    • 新增約束

      -- 建立表時新增非空約束
      CREATE TABLE 表名(
         列名 資料型別 NOT NULL,
         …
      ); 
      
      
      -- 建完表後新增非空約束
      ALTER TABLE 表名 MODIFY 欄位名 資料型別 NOT NULL;
      
    • 刪除約束

      ALTER TABLE 表名 MODIFY 欄位名 資料型別;
      

1.4 唯一約束

  • 語法

    • 新增約束

      -- 建立表時新增唯一約束
      CREATE TABLE 表名(
         列名 資料型別 UNIQUE [AUTO_INCREMENT],
         -- AUTO_INCREMENT: 當不指定值時自動增長
         …
      ); 
      CREATE TABLE 表名(
         列名 資料型別,
         …
         [CONSTRAINT] [約束名稱] UNIQUE(列名)
      ); 
      
      
      -- 建完表後新增唯一約束
      ALTER TABLE 表名 MODIFY 欄位名 資料型別 UNIQUE;
      
    • 刪除約束

      ALTER TABLE 表名 DROP INDEX 欄位名;
      

1.5 主鍵約束

  • 語法

    • 新增約束

      -- 建立表時新增主鍵約束
      CREATE TABLE 表名(
         列名 資料型別 PRIMARY KEY [AUTO_INCREMENT],
         …
      ); 
      CREATE TABLE 表名(
         列名 資料型別,
         [CONSTRAINT] [約束名稱] PRIMARY KEY(列名)
      ); 
      
      
      -- 建完表後新增主鍵約束
      ALTER TABLE 表名 ADD PRIMARY KEY(欄位名);
      
    • 刪除約束

      ALTER TABLE 表名 DROP PRIMARY KEY;
      

1.6 預設約束

  • 語法

    • 新增約束

      -- 建立表時新增預設約束
      CREATE TABLE 表名(
         列名 資料型別 DEFAULT 預設值,
         …
      ); 
      
      
      -- 建完表後新增預設約束
      ALTER TABLE 表名 ALTER 列名 SET DEFAULT 預設值;
      
    • 刪除約束

      ALTER TABLE 表名 ALTER 列名 DROP DEFAULT;
      

1.7 外來鍵約束

  • 新增外來鍵約束
-- 建立表時新增外來鍵約束
CREATE TABLE 表名(
   列名 資料型別,
   …
   [CONSTRAINT] [外來鍵名稱] FOREIGN KEY(外來鍵列名) REFERENCES 主表(主表列名) 
); 


-- 建完表後新增外來鍵約束
ALTER TABLE 表名 ADD CONSTRAINT 外來鍵名稱 FOREIGN KEY (外來鍵欄位名稱) REFERENCES 主表名稱(主表列名稱);
  • 刪除外來鍵約束
ALTER TABLE 表名 DROP FOREIGN KEY 外來鍵名稱;

二、資料庫設計

2.1 資料庫設計簡介

  • 資料庫設計概念

    • 資料庫設計就是根據業務系統的具體需求,結合我們所選用的DBMS,為這個業務系統構造出最優的資料儲存模型。
    • 建立資料庫中的表結構以及表與表之間的關聯關係的過程。
    • 有哪些表?表裡有哪些欄位?表和表之間有什麼關係?
  • 資料庫設計的步驟

    • 需求分析(資料是什麼? 資料具有哪些屬性? 資料與屬性的特點是什麼)
    • 邏輯分析(通過ER圖對資料庫進行邏輯建模,不需要考慮我們所選用的資料庫管理系統)
    • 物理設計(根據資料庫自身的特點把邏輯設計轉換為物理設計)
    • 維護設計(1.對新的需求進行建表;2.表優化)

表關係

  • 一對一

    • 如:使用者 和 使用者詳情
    • 一對一關係多用於表拆分,將一個實體中經常使用的欄位放一張表,不經常使用的欄位放另一張表,用於提升查詢效能
  • 一對多

    • 如:部門 和 員工

    • 一個部門對應多個員工,一個員工對應一個部門

  • 多對多

    • 如:商品 和 訂單

    • 一個商品對應多個訂單,一個訂單包含多個商品

2.2 表關係(一對多)

  • 實現方式

    在多的一方建立外來鍵,指向一的一方的主鍵

2.3 表關係(多對多)

  • 實現方式

    建立第三張中間表,中間表至少包含兩個外來鍵,分別關聯兩方主鍵

2.4 表關係(一對一)

  • 實現方式

    在任意一方加入外來鍵,關聯另一方主鍵,並且設定外來鍵為唯一(UNIQUE)

三、多表查詢

從多張表中一次性的查詢出我們想要的資料

3.1 內連線查詢

  • 語法
-- 隱式內連線
SELECT 欄位列表 FROM 表1,表2… WHERE 條件;
-- 例子
select emp.name from emp, dept where emp.dep_id = dept.did;


-- 顯示內連線
SELECT 欄位列表 FROM 表1 [INNER] JOIN 表2 ON 條件;
-- 例子
select * from emp inner join dept on emp.dep_id = dept.did;

內連線相當於查詢 A B 交集資料

3.2 外連線查詢

  • 語法

    -- 左外連線
    SELECT 欄位列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 條件;
    --例子
    select * from emp left join dept on emp.dep_id = dept.did;
    
    
    -- 右外連線
    SELECT 欄位列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 條件;
    -- 例子
    select * from emp right join dept on emp.dep_id = dept.did;
    

    左外連線:相當於查詢A表所有資料和交集部分資料

    右外連線:相當於查詢B表所有資料和交集部分資料

3.3 子查詢

  • 概念

    查詢中巢狀查詢,稱巢狀查詢為子查詢

  • 例子

    • 查詢 '財務部' 和 '市場部' 所有的員工資訊

      -- 查詢 '財務部' 或者 '市場部' 所有的員工的部門did
      select did from dept where dname = '財務部' or dname = '市場部';
      
      select * from emp where dep_id in (select did from dept where dname = '財務部' or dname = '市場部');
      
    • 查詢入職日期是 '2011-11-11' 之後的員工資訊和部門資訊

      -- 查詢入職日期是 '2011-11-11' 之後的員工資訊
      select * from emp where join_date > '2011-11-11' ;
      -- 將上面語句的結果作為虛擬表和dept表進行內連線查詢
      select * from (select * from emp where join_date > '2011-11-11' ) t1, dept where t1.dep_id = dept.did;
      

四、事務

4.1 概述

資料庫的事務(Transaction)是一種機制、一個操作序列,包含一組資料庫操作命令。

事務把所有的命令作為一個整體一起向系統提交或撤銷操作請求,即這一組資料庫命令要麼同時成功,要麼同時失敗

事務是一個不可分割的工作邏輯單元

4.2 語法

  • 開啟事務

    START TRANSACTION;
    或者  
    BEGIN;
    
  • 提交事務

    commit;
    
  • 回滾事務

    rollback;
    

4.3 事務的四大特徵

  • 原子性(Atomicity): 事務是不可分割的最小操作單位,要麼同時成功,要麼同時失敗

  • 一致性(Consistency) :事務完成時,必須使所有的資料都保持一致狀態

  • 隔離性(Isolation) :多個事務之間,操作的可見性

  • 永續性(Durability) :事務一旦提交或回滾,它對資料庫中的資料的改變就是永久的

說明:

mysql中事務是自動提交的。

也就是說我們不新增事務執行sql語句,語句執行完畢會自動的提交事務。

可以通過下面語句查詢預設提交方式:

SELECT @@autocommit;

查詢到的結果是1 則表示自動提交,結果是0表示手動提交。當然也可以通過下面語句修改提交方式

set @@autocommit = 0;