MySQL修煉之路四

来源:https://www.cnblogs.com/zhangchenchuan/archive/2019/10/19/11703778.html
-Advertisement-
Play Games

1. 外鍵(foreign key) 1. 定義:讓當前表欄位的值在另一個表的範圍內選擇 2. 語法 foreign key(參考欄位名) references 主表(被參考欄位名) on delete 級聯動作 on update 級聯動作 3. 使用規則 1. 主表、從表欄位數據類型要一致 2. ...


1. 外鍵(foreign key)

  1. 定義:讓當前表欄位的值在另一個表的範圍內選擇
  2. 語法
    foreign key(參考欄位名)
    references 主表(被參考欄位名)
    on delete 級聯動作
    on update 級聯動作
  3. 使用規則
    1. 主表、從表欄位數據類型要一致
    2. 主表被參考欄位: 主鍵
  4. 示例
    表1、繳費信息表(財務)
      id 姓名 班級 繳費金額
      1 唐伯虎 AID06 300
      2 點秋香 AID06 260
      3 祝枝山 AID06 250
    表2、學生信息表(班主任)
      id 姓名 繳費金額
      1 唐伯虎 300
      2 點秋香 260
      3 XXXXXXXXXXX

    1. 創建表
      表1(主表):
        create table jftab(
        id int primary key,
        name varchar(15),
        class char(5),
        money int
        );

        insert into jftab values
        (1,'唐伯虎', "AID06",300),
        (2,"點秋香", "AID06",260),
        (3,"祝枝山", "AID06",250);
      表2(從表):
        create table bjtab(
        stu_id int,
        name varchar(15)
        money int,
        foreign key(stu_id) references jftab(id)
        on delete cascade
        on update cascade
        );

        insert into bjtab values
        (1,'唐伯虎', "AID06",300),
        (2,"點秋香", "AID06",260);

  5. 刪除外鍵
    alter table 表名 drop foreign key 外鍵名;
    外鍵名:show create table 表名;

  6. 級聯動作
    1. cascade
      數據級聯刪除、更新(參考欄位)
    2. restrict(預設)
      從表有相關聯記錄,不允許主表操作
    3. set null
      主表刪除、更新,從表相關聯記錄欄位值為NULL

  7. 已有表添加外鍵
    alter table 表名 add
    foreign key(參考欄位) referencees 主表(被參考欄位)
    on delete ...
    on update ...

2. 表的複製

  1. 語法
    create table 表名 select ... from 表名 where 條件;
  2. 示例
    1. 複製MOSHOU.sanguo表的全部記錄和欄位,sanguo2
      create table sanguo2
      select * from MOSHOU.sanguo;
    2. 複製MOSHOU.sanguo表的前3條記錄,sanguo3
      create table sanguo3
      select * from MOSHOU.sanguo limit 3;
    3. 複製MOSHOU.sanguo表的id,name,country三個欄位的前5條記錄,sanguo4
      create table sanguo4
      select id,name,country from MOSHOU.sanguo limit 5;

  3. 複製表結構
    create table 表名 select * from 表名 where false;

    1. 複製 jftab 的表結構,jftab2
      create table jftab2 select * from jftab where false;

  4. 註意
    複製表的時候不會把原表的鍵(key)屬性複製過來

3. 嵌套查詢(子查詢)

  1. 定義: 把內層的查詢結果作為外層的查詢條件
  2. 語法格式
    select ... from 表名 where 條件(select ....);
  3. 示例
    1. 把攻擊值小於平均值的英雄名字和攻擊值顯示出來
      1. 先計算平均值
        select avg(gongji) from MOSHOU.sanguo;
      2. 找到 < 平均值
        select name,gongji from MOSHOU.sanguo
        where gongji< 平均值;

      上面兩條語句的結合為: select name,gongji from MOSHOU.sanguo
        where gongji< (select avg(gongji) from MOSHOU.sanguo);

    2. 找出每個國家攻擊力最高的英雄的名字和攻擊值
      BUG: select name,gongji from MOSHOU.sanguo
      where
      gongji in(select max(gongji) from sanguo group by country);
      ## 無BUG
      select name,gongji from MOSHOU.sanguo
      where
      (country,gongji) in(select country,max(gongji) from sanguo group by country);

4. 多表查詢

  1. 兩種方式
    1. select 欄位名列表 from 表名列表;(笛卡爾積)
      t1: name -> "A1" "A2" "A3"
      t2: name -> "B1" "B2"
      select * from t1,t2;
    2. ... where 條件;

  2. 練習
    1. 顯示省和市的詳細信息
      河北省 石家莊市
      河北省 廊坊市
      湖北省 武漢市

      select sheng.s_name,city.c_name from sheng,city
      where
      sheng.s_id = city.cfather_id;
    2. 顯示省、市和縣的詳細信息
      select sheng.s_name,city.c_name,xian.x_name from sheng,city,xian
      where
      sheng.s_id = city.cfather_id and city.c_id = xian.xfather_id;

5. 連接查詢

  1. 內連接
    1. 語法格式
      select 欄位名 from 表1 inner join 表2 on 條件
      inner join 表3 on 條件;
    2. 顯示省市詳細信息
      select sheng.s_name,city.c_name from sheng
      inner join city on sheng.s_id=city.cfather_id;
    3. 顯示省市縣詳細信息
      select sheng.s_name,city.c_name,xian.x_name from sheng
      inner join city on sheng.s_id=city.cfather_id
      inner join xian on city.c_id = xian.xfather_id;

  2. 外連接
    1. 左連接
      1. 以左表為主顯示查詢結果
      2. select 欄位名 from
        表1 left join 表2 on 條件
        left join 表3 on 條件;
      3. 顯示省市詳細信息
        select sheng.s_name as sheng,city.c_name as city
        from sheng left join city
        on sheng.s_id=city.cfather_id;
      4. 顯示省市縣的詳細信息
        select sheng.s_name as sheng,city.c_name as city,xian.x_name as xian
        from sheng left join city
        on sheng.s_id=city.cfather_id
        left join xian
        on city.c_id = xian.xfather_id;

    2. 右連接
      1. 以右表為主顯示查詢結果
      2. select 欄位名 from
        表1 right join 表2 on 條件
        right join 表3 on 條件;

6. 數據備份(mysqldump,在Linux終端中操作)

  1. 命令格式
    完全備份:
    mysqldump -u用戶名 -p 源庫名 > ~/***.sql
  2. 源庫名的表示方式
    --all-databases 備份所有庫
    庫名 備份單個庫
    -B 庫1 庫2 庫3 備份多個庫
    庫名 表1 表2 表3 備份指定庫的多張表

  3. 示例
    1. 備份所有庫,放到 mydata 目錄下:all.sql
      mysqldump -uroot -p --all-databases > all.sql
    2. 備份 db4 庫中的 sheng city xian 三張表,scx.sql
      mysqldump -uroot -p db4 sheng city xian > scx.sql
    3. 備份 MOSHOU 和 db4 庫,md.sql
      mysqldump -uroot -p -B MOSHOU db4 > md.sql

7. 數據恢復

  1. 命令格式(Linux終端)
    mysql -uroot -p 目標庫名 < ***.sql

  2. 從所有庫備份中恢復某個庫(--one-database)
    mysql -uroot -p --one-database 目標庫名 < all.sql

  3. 示例
    1. 在db4.sheng 新增一條記錄

    2. 在db4中新建一張表 t888
    3. 在db4.sql中恢復db4庫

    4.註意
      1. 恢復庫時如果恢復到源庫會將表中數據覆蓋,新增表不會刪除
      2. 數據恢復時如果恢復的庫不存在,則必須先創建空庫

8. MySQL的用戶賬戶管理

  1. 開啟MySQL遠程連接
    1. sudo -i
    2. cd /etc/mysql/mysql.conf.d/
    3. subl mysqld.cnf
      #bind-address = 127.0.0.1 ctrl + s保存

    4. /etc/init.d/mysql restart
  2. 添加授權用戶
    1. 用root用戶登錄mysql
      mysql -uroot -p123456
    2. 授權
      grant 許可權列表 on 庫.表 to "用戶名"@"%"
      identified by "密碼" with grant option;
      with grant option # 這句表示新添加的用戶名有往下授權的許可權

      許可權列表:all privileges、select、insert
      庫.表 :*.* 所有庫的所有表

  3. 示例
    1. 添加授權用戶tiger,密碼123,對所有庫的所有表有所有許可權
      grant all privileges on *.* to "zcc"@"%"
      identified by "123" with grant option;

    2. 添加用戶rabbit,對db4庫有所有許可權
      grant all privileges on db4.* to "rabbit"@"%"
      idetified by "123" with grant option;


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • crontab 是用來讓使用者在固定時間或固定間隔執行程式之用 參數說明 選項 功能 -e 編輯crontab定時任務 -l 查詢crontab任務 -r 刪除當前用戶所有的crontab任務 時間格式 項目 含義 範圍 第一個“*” 一小時當中的第幾分鐘 0-59 第二個“*” 一天當中的第幾小時 ...
  • 回到目錄 (續上小節) 3. 分壓偏置 前面的“改進型固定偏置”電路,雖然情況比原始的固定偏置電路好了一點,但還是不太理想,於是人們又設計出了性能更加穩定的分壓偏置(voltage-divider bias configuration)電路,如下圖所示: 圖3-6.06 分壓偏置電路的穩定性非常完美 ...
  • https://www.jb51.net/article/82608.htm https://blog.csdn.net/taian1665/article/details/86492400 https://blog.51cto.com/bantu/1982399 https://blog.csdn ...
  • 今日工作:資料庫連接、數據寫入 一、資料庫連接:使用了pymysql庫 二、數據寫入 代碼部分結束,雖然今天的代碼看起來又少又容易,但sql語句可真是廢了不少力氣。 最終資料庫成果,總共1729條數據: ...
  • 1. 鎖分類 MySQL中主要分為全局鎖、表級鎖和行鎖三類。本篇主要涉及全局鎖和表級鎖。 2. 全局鎖 全局鎖是對整個資料庫實例進行加鎖。 Flush table with read lock(FRTWRL)該命令用於加全局鎖。使用該命令之後,整個庫處於只讀狀態,不能執行數據的增刪改查、建表、修改表 ...
  • 列的查詢 語法1-1 基本的SELECT語句 SELECT <列名>,... FROM <表名>; 語法1-2 查詢出表中所有的列 SELECT * FROM <表名>; 星號(*)是代表全部列的意思。使用星號無法設定列的顯示順序。 語法1-3 1.為列設定別名 eg:SELECT product_ ...
  • 作為一名應用系統開發人員,為什麼要關註數據內部的存儲和檢索呢?首先,你不太可能從頭開始實現一套自己的存儲引擎,往往需要從眾多現有的存儲引擎中選擇一個適合自己應用的存儲引擎。因此,為了針對你特定的工作負載而對資料庫調優時,最好對存儲引擎的底層機制有一個大概的瞭解。 今天我們就先來瞭解下關係型資料庫My ...
  • 前言 當我們在Redis資料庫中set一個KV的時候,這個KV保存在哪裡?如果我們get的時候,又從哪裡get出來。時間複雜度,空間複雜的等等,怎麼優化等等一系列問題。 伺服器中的資料庫 Redis伺服器將所有資料庫信息都保存在redis.h##redisService結構體中。代碼如下: 列了幾個 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...