MySQL的事務特性
1.原子性:原子性就是這個事件要么執行完,要么沒執行,不會存在中間狀態,與C++中華那個加鎖避免多線程競爭是一個道理;
2.一致性:保持事件的操作對象雙方某數據之和是不變的,就以轉賬為例,A轉給B100塊,那么A的余額多100,B的余額就必須少100;
3.隔離性:隔離就是獨立的,A事件正在進行時,B事件是看不到A時間的變化過程的,只能看到A事件的起始和結束狀態;
4.持久性:事務提交上的數據會被永遠的保存到數據庫中,即便系統突然崩潰數據也不會發生變化;
MySQL索引
MySQL索引種類
普通索引:沒有什么限制,可以字段中可以出現多個重復的數據,也可以為空
唯一索引:字段中的數據不可以重復,但是可以為空,前提是該字段可以為空
主鍵索引:通常在建表的時候就會加上的索引,就以主鍵類比即可,唯一+不為空
組合索引:某兩個字段通常會被配合一塊查詢,所以就同時組合加上索引
全文索引:知道即可
索引原理
B樹數據結構;
先不說什么是B樹,我們就談談元組在表中的存儲是什么數據結構--->指針數組
每一個指針指向一個元組;所以我們查找某一項數據的時候不就需要遍歷數組嗎;那遍歷數組的復雜度不就是On嗎,
對吧,先不說什么是索引,就單看現在你面前有個數組,你要查詢,你怎么優化;
-->樹型結構,對吧!
我們都知道搜索二叉樹的就是用來查找的樹型結構,一般時間復雜度是Ologn,對吧這就實現了優化,
那么回到上面的問題,我們該如何優化查找元組,就是一個優化數組搜索的問題罷了;
在MySQL中不是用的二叉搜索樹,而是用的B樹,先簡單說一下B樹也是一個樹,只不過是跟二叉搜索樹不一樣罷了,不要以為是什么高大尚的數據結構;我們先簡單把他理解成是多叉樹!!
那么我們先想想為什么不用二叉搜索樹呢?-->效率問題!!!
>我們先來劃分一下立場,二叉搜索樹搜索的數據是不是在內存中,內存中搜索是不是很快;
我們再來看看數據庫查找數據是在哪里,回答我!!!!是不是在硬盤上進行IO啊,他是與硬件交互的,怎么跟內存中茶軸相比,a?對不對?
那二叉搜索樹,可不可以在進行優化一下,畢竟二叉搜索樹他在搜索他也就兩個叉,我如果用多個叉來構建數據結構,是不是會更加的便捷;從樹的形態上看,樹的高度是不是就會變低,寬度變大,這意味這什么?這意味著我搜索數據可以少走彎路了,對不?
所以知道為什么不用二叉搜索樹了吧,但是多叉樹是一個十分寬泛的詞, 對不,為什么要專門為二叉搜索樹起名叫二叉搜索樹的呢,對吧,那么我們多叉搜索樹也要有個范!!!
-->就叫做b樹,懂了吧!!!!
集體b樹的實現可分為多維的,可以是3維,4維,意思就是一個節點分治是3個4個罷了;
所以,懂了吧!!!