MYSQL資料庫的學習

2021-10-11 01:35:55 字數 3339 閱讀 5749

日積月累,不積跬步,努力提高自己的能力,利用瑣碎的時間來學習一下資料庫!記錄所學的內容,以便日後查詢

6、引擎

7、b+和b樹

8、子查詢執行順序

什麼是檢視呢?就是把複雜的語句簡化成一條簡單的sql語句,可以想象為別名操作,就跟c++裡的using ptr = shared_ptr似的。別名操作,簡化操作。

select student.id,name,coursename,grade from  student

left

join course on student.id = course.id;

比如這樣稍長的語句,如果我們使用檢視可以簡化這個sql語句,首先我們建立乙個檢視。

create

view selectview as

select

student.id,name,coursename,grade from student

left

join course on student.id = course.id;

以後再想使用這個操作,可以直接檢視來進行查詢

select

*from selectview;

如果是單錶,修改檢視的資料會改變原始表的資料。兩個連線以上修改檢視的資料是不會影響原始表的。

刪除檢視

drop view selectview
記錄耗時長的操作,我們先看一看有沒有開啟慢查詢日誌,開啟日誌功能也是耗時的所以有時候預設都是不開啟的。如果log是off,我們給他開啟一下

執行這個操作進行開啟,記住哦,這個是全域性變數,所以要加個glboal;

set

global slow_query_log=

on;

查詢資料庫對慢操作的時間限定在多少秒之內

把第乙個值修改一下

set long_query_time =

2;

在一開始show variables like 『%slow%』;的操作中就已經得到了日誌檔案的目錄,一定要確保慢查詢日誌是開啟的,開啟才會記錄的。

乙個簡單慢操作的測試:select sleep(6);檢視慢查詢檔案日誌,發現已經記錄於此了

explain來檢視查詢語句是否使用了索引,效能上分析

explain加具體的查詢語句

建立乙個普通的索引create index nameindex table tablename(屬性名),create index nameindex table student(name);'name』是乙個屬性。

檢視是否有索引show indexfromstudent

show index from student\g檢視具體索引屬性

資料量大的時候,索引會建的慢,但是查詢起來巨快,建了索引並不一定會快,要看怎麼去使用,如果有like 『%『模糊查詢還是會掃瞄一遍的。

索引的最左匹配原則,先看左邊的,如果都是=等號,繼續往右邊走,如果發現是範圍查詢,那麼走完之後就不再是索引了而是全表掃瞄了。所以要選擇恰當的索引。

參考部落格的鏈結

為什麼b/b+樹可以減少i/o次數?就是用到了磁碟預讀,就是讓乙個結點變大,和頁的大小一致,這樣訪問乙個結點進行一次i/o,這是紅黑樹不可以做到的地方。所以這也解釋了訪問乙個結點就是進行了一次io操作

索引失效的情況

索引的好處

髒讀讀取到了未提交的事務

不可重複讀

事務a兩次查詢語句一模一樣,但是讀到的東西不一樣,因為事務b修改了且提交了事務,兩次讀的資料不重複,本應該在乙個事務裡是一樣的,但現在不一樣了資料不重複了所以稱為不可重複讀。

幻讀a事務第一次查詢有100條記錄,第二次查詢有200條記錄,這數量咋又不一樣了?原來又是b事務這小子新增了100條記錄,給a造成了幻覺,稱之為幻讀

不可重複讀和幻讀區別?

我剛開始學的時候我也在想,都是事務a查詢兩次,兩次結果不一樣,有啥區別呢?

不可重複讀針對的是update操作,幻讀針對的是insert和delete操作。針對的操作不同罷了

參考部落格鏈結

資料庫隔離級別

myisam是表鎖,對整表都進行加鎖,適用於讀操作,不適合大量寫操作,併發想對低

innodb支援事務,是行鎖,併發相對高,讀寫都可以

在查詢乙個樹值範圍的時候,b樹中間結點也會儲存值,還在去遍歷他的結點才能取得乙個範圍,而b+樹的資訊都存放在他的葉子結點了,中間結點存放的是下面的數值大小區間而不是具體的資訊,而且b+樹葉子結點都連在一起了像鍊錶一樣,所以b+樹查詢乙個值的範圍時候會優於b樹的。

以前真的沒怎麼思考過子查詢順序,一直都以為先執行子查詢呢,直到今天做了一道mysql的題目,如此詭異的子查詢讓我蒙逼了。我不禁思考子查詢的順序,我百思不得其解啊,如果按照先執行內部的話這咋能對啊。我真是沒想明白,搜了一下解釋,終於明白了,這執行順序原來與關聯子查詢和非關聯子查詢有聯絡啊。看最下面的圖

對上述答案詭異的寫法一種解釋

Mysql資料庫學習

進入mysql終端,輸入密碼後可進入操作終端 mysql u root p 檢視當前存在的資料庫 show databases 使用資料庫 use dbname 檢視當前資料庫中存在的表 show tables 檢視表結構 desc tablename 檢視mysql編碼命令 檢視資料庫mysql編...

mysql資料庫學習

sql structured query language 結構化查詢語言 ddl 資料定義語言 create drop alter dml data manipulation language insert delete update dql data query language select ...

mysql資料庫學習

按照資料結構來組織,儲存和管理資料的倉庫。或者資料庫是長期儲存在計算機內 有組織的 可共享的資料集合。sql structured query language 結構化查詢語言 ddl data definition language 資料定義語言 用來定義資料庫和資料表,指令有create建立 d...