MySQL技術內幕:SQL編程

== 本文持續更新,建議關注收藏 ==

簡述

本文記錄一些關於sql語言的最根本的基礎,堪稱靈魂內幕。

適用人羣:

適合對sql熟練使用的rd或者dba學習,功力深厚的大牛可以略讀。

方式

將以小Tip、小問題的形式拋出知識點,進一步擴展。

Q&A

  • sql是一種語言?還是工具?和java、c++啥區別?

其實sql也是一種編程語言,這個緯度的話和java、c++沒啥區別,也有自己的語法邏輯等,只是sql是用來解決數據庫相關問題的,而java、c++解決的是業務邏輯層問題。

  • java是面向對象,php面向過程/對象,c++/c面向過程,sql呢?

sql是一種面向集合的語言。
因爲sql是解決數據庫相關問題而存在的,而數據庫從模型上分爲關係數據庫、非關係數據庫,而mysql屬於關係型數據庫,而關係型數據庫是在數學基礎上發展出來的【此處可以回想下大學裏的高數及矩陣的知識了,誰說學高數這些沒啥用…此處省略1w字】,而關係對應的就是數學中的集合【常見的操作對應集合的選擇、投影、連接、交、並、差、除】,所以你雖然看到的是二維的表數據,但實質還是面向集合的產物。

  • sql引擎是啥?爲啥經常被忽略?
  • sql查詢語句執行的順序是?每個過程中間差價你瞭解嗎?

往下看,你會發現select語句,執行select的時候是在第八步,前前後後中間差價有很多,一些甚至相對rd是透明的。

1、from
笛卡爾積
2、on
3、join
4、where
5、group by
6、cube|rollup
7、having
8、select
9、distinct
若語句中含distinct,引擎會創建一張內存臨時表【結構和上一步結果表一致,當然內存不夠的情況下,臨時表會在磁盤中】,在臨時表中會對distinct操作列增加一個唯一索引,從而去除重複數據。
10、order by
11、limit

  • sql結果默認是主鍵排序?【不使用order by等排序語法】
  • sql的replace into高併發易造成死鎖的原因?
  • 嵌套查詢、非嵌套查詢?
    一般情況下,嵌套查詢要比非嵌套更慢,沒錯,是慢了,多了些相關子查詢;
  • 相關子查詢、獨立子查詢?

實用技巧

  • 在開發過程中,針對已有的業務迭代類項目,經常需要根據業務需求查詢陌生的庫表結構及數據case,進而快速熟悉原有業務數據結構,並基於擴展設計。常用的sql:

查看錶結構:desc tableName;
查看創建表的語法:show create tbale tableName;

  • 有時候,你會發現查詢的結果中存在亂碼,不要緊,安排上:

可以改變當前會話的編碼,不影響原庫的一切:set names ‘utf8’;

  • 查看當前回話數據庫隔離級別:

select @@tx_isolation

  • 查看全局數據庫隔離級別:

select @@global.tx_isolation

附同名物料

SQL技術內幕:SQL編程
java面試靈魂:https://blog.csdn.net/qq_34417408/article/details/99936875

發佈了72 篇原創文章 · 獲贊 53 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章