Mysql基礎04-查詢

来源:https://www.cnblogs.com/Open-ing/archive/2019/12/27/12037140.html
-Advertisement-
Play Games

關聯查詢 1、內連接:實現A∩B select 欄位列表 from A表 inner join B表 on 關聯條件 where 等其他子句; 2、左外連接 #實現查詢結果是A select 欄位列表 from A表 left join B表 on 關聯條件 where 等其他子句; #實現A - ...


關聯查詢

1、內連接:實現A∩B

select 欄位列表
from A表 inner join B表
on 關聯條件
where 等其他子句;

2、左外連接

#實現查詢結果是A
select 欄位列表
from A表 left join B表
on 關聯條件
where 等其他子句;

#實現A - A∩B
select 欄位列表
from A表 left join B表
on 關聯條件
where 從表關聯欄位 is null and 等其他子句;

3、右外連接

#實現查詢結果是B
select 欄位列表
from A表 right join B表
on 關聯條件
where 等其他子句;

#實現B -  A∩B
select 欄位列表
from A表 right join B表
on 關聯條件
where 從表關聯欄位 is null and 等其他子句;

4、用union代替全外連接

#實現查詢結果是A∪B
#用左外的A,union 右外的B
select 欄位列表
from A表 left join B表
on 關聯條件
where 等其他子句

union 

select 欄位列表
from A表 right join B表
on 關聯條件
where 等其他子句;

#實現A∪B -  A∩B  或   (A -  A∩B) ∪ (B - A∩B)
#使用左外的 (A -  A∩B)  union 右外的(B - A∩B)
select 欄位列表
from A表 left join B表
on 關聯條件
where 從表關聯欄位 is null and 等其他子句

union

select 欄位列表
from A表 right join B表
on 關聯條件

UNION規則

UNION中的每個查詢必須包含相同的列、表達式或聚集函數(不過,各個列不需要以相同的次序列出)。

列數據類型必須相容:類型不必完全相同,但必須是DBMS可以隱含轉換的類型(例如,不同的數值類型或不同的日期類型)。

實際上,UNION在需要組合多個表的數據時也很有用,即使是有不匹配列名的表,在這種情況下,可以將UNION與別名組合,檢索一個結果集。

5、自連接:同一張表,通過取別名的方式來虛擬成兩張表

select 欄位列表
from 表名 別名1 inner/left/right join 表名 別名2
on 別名1.關聯欄位 = 別名2的關聯欄位
where 其他條件

6大子句順序

(1)from:從哪些表中篩選

(2)where:從表中篩選的條件

(3)group by:分組依據

(4)having:在統計結果中再次篩選

(5)order by:排序

降序:desc  升序:要麼預設,要麼加asc

雖然ORDER BY子句似乎只是最後一條SELECT語句的組成部分,但實際上DBMS將用它來排序所有SELECT語句返回的所有結果。

(6)limit:分頁

limit m,n

m = (第幾頁 - 1)*每頁的數量

n = 每頁的數量

group by與分組函數

可以使用GROUP BY子句將表中的數據分成若幹組

在SELECT列表中,所有未包含在分組函數中的列都應該包含在 GROUP BY子句中

包含在 GROUP BY 子句中的列不必包含在SELECT 列表中

having與where的區別

(1)where是從表中篩選的條件,而having是統計結果中再次篩選

(2)where後面不能加“分組/聚合函數”,而having後面可以跟分組函數

子查詢

嵌套在另一個查詢中的查詢,作為子查詢的SELECT語句只能查詢單個列。企圖檢索多個列將返回錯誤。

根據位置不同,分為:

(1)where型

①子查詢是單值結果,那麼可以對其使用(=,>等比較運算符)

②子查詢是多值結果,那麼可對其使用(【not】in(子查詢結果),或 >all(子查詢結果),或>=all(子查詢結果),<all(子查詢結果),<=all(子查詢結果),或 >any(子查詢結果),或>=any(子查詢結果),<any(子查詢結果),<=any(子查詢結果))

(2)from型

必須給子查詢取別名,即臨時表名,表的別名不要加“”和空格

表別名不僅能用於WHERE子句,還可以用於SELECT的列表、ORDER BY子句以及其他語句部分。

表別名只在查詢執行中使用。與列別名不一樣,表別名不返回到客戶端。

(3)exists型

註意:不管子查詢在哪裡,子查詢必須使用()括起來

事務

保證所有事務都作為一個工作單元來執行,即使出現了故障,都不能改變這種執行方式。當在一個事務中執行多個操作時,要麼所有的事務都被提交(commit),那麼這些修改就永久地保存下來;要麼資料庫管理系統將放棄所作的所有修改,整個事務回滾(rollback)到最初狀態

事務的ACID屬性:

(1)原子性(Atomicity) 原子性是指事務是一個不可分割的工作單位,事務中的操作要麼都發生,要麼都不發生。

(2)一致性(Consistency) 事務必須使資料庫從一個一致性狀態變換到另外一個一致性狀態。

(3)隔離性(Isolation) 事務的隔離性是指一個事務的執行不能被其他事務干擾,即一個事務內部的操作及使用的數據對併發的其他事務是隔離的,併發執行的各個事務之間不能互相干擾。

(4)持久性(Durability) 持久性是指一個事務一旦被提交,它對資料庫中數據的改變就是永久性的,接下來的其他操作和資料庫故障不應該對其有任何影響

mysql預設是自動提交,執行一句就提交一句。

我想要手動提交事務:

(1)set autocommit=false;

接下來所有語句都必須手動提交,

commit; 或 rollback; 或發生異常;

直到我set autocommit=true;或重新連接,

否則它之後的語句全部都需要手動提交

(2)start transaction;

在自動提交模式下,單獨針對某一組sql開啟事務

一組sql語句

commit; 或 rollback;

資料庫的隔離級別

    • 臟讀: 對於兩個事務 T1, T2, T1 讀取了已經被 T2 更新但還沒有被提交的欄位。 之後, 若 T2 回滾, T1讀取的內容就是臨時且無效的。

    • 不可重覆讀: 對於兩個事務T1, T2, T1 讀取了一個欄位, 然後 T2 更新了該欄位。 之後, T1再次讀取同一個欄位, 值就不同了。

    • 幻讀: 對於兩個事務T1, T2, T1 從一個表中讀取了一個欄位, 然後 T2 在該表中插入了一些新的行。 之後, 如果 T1 再次讀取同一個表, 就會多出幾行。

  • 資料庫事務的隔離性:資料庫系統必須具有隔離併發運行各個事務的能力, 使它們不會相互影響, 避免各種併發問題。

  • 一個事務與其他事務隔離的程度稱為隔離級別。資料庫規定了多種事務隔離級別, 不同隔離級別對應不同的干擾程度, 隔離級別越高, 數據一致性就越好, 但併發性越弱。

Oracle 支持的 2 種事務隔離級別:READ COMMITED, SERIALIZABLE。 Oracle 預設的事務隔離級別為: READ COMMITED 。

Mysql 支持 4 種事務隔離級別。 Mysql 預設的事務隔離級別為: REPEATABLE READ。在mysql中REPEATABLE READ的隔離級別也可以避免幻讀了。

在MySql中設置隔離級別

  • 每啟動一個 mysql 程式, 就會獲得一個單獨的資料庫連接。每個資料庫連接都有一個全局變數 @@tx_isolation, 表示當前的事務隔離級別.

  • 查看當前的隔離級別: SELECT @@tx_isolation;

  • 查看全局的隔離級別: SELECT @@global.tx_isolation;

  • 設置當前 mySQL 連接的隔離級別:

set tx_isolation ='repeatable-read';
  • 設置資料庫系統的全局的隔離級別:

set global tx_isolation ='read-committed';

註意:這裡的隔離級別中間是減號,不是下劃線。

用戶與許可權

用戶登錄

(1)IP+用戶名作為身份驗證

(2)密碼

給每個用戶許可權,4個許可權級別:

(1)全局(2)資料庫(3)表(4)欄位

依次校驗許可權,如果前面通過了,後面就不校驗了:

全局 > 資料庫 > 表 > 欄位

註意:root@localhost,這個用戶始終保留所有的全局許可權。

查看賬戶許可權:

show grants for user@host;


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

-Advertisement-
Play Games
更多相關文章
  • 服務發現 其實簡單說,服務發現就是解耦服務與IP地址之間的硬綁定關係,以典型的集群為例,對於集群來說,是有多個節點的,這些節點對應多個IP(或者同一個IP的不同埠號),集群中不同節點責任是不一樣的。比如說一個數據集群中,可以分為讀節點或者寫節點,寫節點和讀節點都是相對的,不是硬綁定的,某一個邏輯節 ...
  • 雖然本人在開發資料庫時,不太使用視圖,但是還是知道 如何獲取視圖中使用的所有表列: SELECT * FROM INFORMATION_SCHEMA.VIEW_COLUMN_USAGE 如何獲取包含視圖所有表: SELECT * FROM INFORMATION_SCHEMA.VIEW_TABLE_ ...
  • 以ms sql server 14 v17為例。 如下表dbo.Q中有一個欄位'' 首先在資料庫的系統存儲過程列表中: 找到sys.sp_addextendedproperty,使用這個為欄位添加一個說明。 EXECUTE [sys].[sp_addextendedproperty] @name=N ...
  • --閃回 回退已刪除的數據 select * from NCMS_SPECIALIST_CHRONIC as of timestamp to_timestamp('2019-12-16 9:04:00', 'yyyy-mm-dd hh24:mi:ss'); --開啟這張表的狀態 alter tabl ...
  • 話不多說先上圖,這是啟動類的配置,這裡配置了@ComponentScan("我的mapper的介面") 接下來是我的項目結構截圖 然後是service 的截圖,我在這裡加了註解@Service 最後我在測試類裡面 的截圖 最後附上我的maven的pom 我開始懷疑是這個配置的有問題了 <?xml v ...
  • Vmvare設置好虛擬機的磁碟大小之後,發現磁碟空間不夠了,這個時候怎麼擴展磁碟的大小呢? 首先,在確保虛擬機關閉的情況下,右鍵設置,選擇硬碟,擴展,這樣就可以增加磁碟的大小。 但是由於未進行分區和磁碟掛載的設置,我們啟動虛擬機以後並不能使用增加的磁碟空間,這個時候怎麼辦呢?有兩種辦法 先用root ...
  • create procedure #pr_CreateFileGroup @dbname nvarchar(max), @filegroupname nvarchar(max) as begin /* 腳本來源:https://www.cnblogs.com/zhang502219048/p/121 ...
  • 電腦學習者經常會用到諸如Sqlserver Mysql Orcal 等“關係型”資料庫。 問題一:那麼,到底什麼是“關係”呢? 首先,我們來看以下三組數據 註:A1,A2表示具體的某個人,比如張三,李四 我們用數學集合的形式對其進行表達,得到三個集合 男人: D1 { A1,A2,A3 } 女人: ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...