Mysql事務索引知識匯總
一、事務
mysql事務是用于處理操作量大、復雜性高的數(shù)據(jù)
1. 事務特性
- 原子性:保證每個事務所有操作要么全部完成或全部不完成,不可能停滯在中間環(huán)節(jié);如事務在執(zhí)行過程中出現(xiàn)錯誤,則會回滾到一致性:事務開始結(jié)束后保證數(shù)據(jù)庫的完整性沒有被破壞,數(shù)據(jù)都是按照數(shù)據(jù)庫要求的規(guī)范寫入。
- 隔離性:數(shù)據(jù)庫允許多個事務同時對數(shù)據(jù)進行讀寫改操作,隔離性則可以防止多個事務由于交叉執(zhí)行時導致數(shù)據(jù)不一致;事務中隔離分為4個級別?!境霈F(xiàn):√ 不會出現(xiàn):×】
臟讀 | 不可重復讀 | 幻讀 | |
讀未提交 | ?? | ?? | ?? |
讀已提交 | ?? | ?? | ?? |
可重復讀 | ?? | ?? | ?? |
串行化 | ?? | ?? | ?? |
持久性:事務提交后對數(shù)據(jù)庫中的修改則是永久性的。
2. 事務并發(fā)時出現(xiàn)的問題
- 臟讀:一個事務在處理過程中讀取了另一個未提交的事務數(shù)據(jù),當未提交的數(shù)據(jù)提交后,最終導致數(shù)據(jù)不一致。
- 不可重復讀:一個事務在多次進行查詢返回數(shù)據(jù)時,另一個事務將數(shù)據(jù)修改后提交,導致前事務數(shù)據(jù)產(chǎn)生不同的結(jié)果。
- 幻讀:A事務將數(shù)據(jù)修改完畢時,同一時間B事務新增一條數(shù)據(jù),A事務提交后查詢發(fā)現(xiàn)還有一條數(shù)據(jù)沒有進行修改,好似產(chǎn)生幻覺一樣則為幻讀。
二、索引
索引能加快數(shù)據(jù)庫的查詢速度并高效獲取指定的數(shù)據(jù)。
優(yōu)勢:
- 提高數(shù)據(jù)檢索效率,降低數(shù)據(jù)庫IO成本
- 通過索引列可以對數(shù)據(jù)進行排序,降低CPU消耗
- 確保數(shù)據(jù)唯一性
- 加速表與表之間連接,實現(xiàn)表與表之間參照完整性
劣勢:
- 占據(jù)磁盤空間
- 降低更新表的效率
1. 索引使用
? ? ? ? 創(chuàng)建索引?? ?? ? ? ? ? ? ? ? 普通索引: ? ? ? ? ? ? ? ? ? create index 索引名稱 on 表名(列名) ? ? ? ? ? ? ? 其他索引(舉例唯一索引unique): ? ? ? ? ? ? ? ? ? ? 公式: ? ? ? ? ? ? ? ? ? ? ? create unique index 索引名稱 on 表名(列名) ? ? ? ? ? ? ? ? ? 實例: ? ? ? ? ? ? ? ? ? ? ? create table Demo(id int, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? name varchar(20), ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? sex int, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? unique index Demo_id(id ASC)); ? ? ? ? ? ? 刪除索引 ? ? ? ? ? ? ? ? 刪除: ? ? ? ? ? ? ? ? ? ? 公式: ? ? ? ? ? ? ? ? ? ? ? ? drop index 索引名 on 表名; ? ? ? ? ? ? ? ? ? ? 實例: ? ? ? ? ? ? ? ? ? ? ? ? drop index Dmoe_id on Demo;
2. 索引類型
- 主鍵索引(primary key):對主鍵進行索引,主鍵不允許空值。
- 普通索引(index/key):默認類型,無限制,允許定義索引時有重復值和空值。
- 唯一索引(unique key):專注于對唯一類型數(shù)據(jù)進行索引,允許空值。
- 全文索引(full key):用于數(shù)值比較、范圍過濾、關鍵字匹配的范圍性快速查詢。
- 聯(lián)合索引:多列值組成索引,用于多列組合查詢。
3. 索引注意原則
- 索引不是越多越好,數(shù)據(jù)量小的表不建議添加索引
- 不建議在經(jīng)常增刪改操作的表中添加索引
- 索引一般添加在需要索引的列上
三、SQL
SQL是一種結(jié)構(gòu)化查詢語言,用于對數(shù)據(jù)進行插入、查詢、更新、刪除操作來管理數(shù)據(jù)庫系統(tǒng)。
1. SQL優(yōu)點
- 簡單易學,操作性強
- 大多數(shù)數(shù)據(jù)庫都支持SQL
- SQL操作數(shù)據(jù)庫時大部分的工作由DBMS來完成
2. SQL分類
- DDL[數(shù)據(jù)定義語言]:用于操作數(shù)據(jù)庫、表、列,常用語句create、alter、drop;
- DML[數(shù)據(jù)操作語言]:用于操作數(shù)據(jù)庫中數(shù)據(jù),常用語句insert、update、delect;
- DCL[數(shù)據(jù)控制語言]:用于操作訪問權(quán)限和安全級別,常用語句grant、deny;
- DQL[數(shù)據(jù)查詢語言]:用于查詢數(shù)據(jù),常用語句select;
3. SQL語法及關鍵字
insert into
:數(shù)據(jù)插入操作,語法為insert into 表名(列1,列2)value(值1,值2),插入時列名和值需要一一對應。select from
:數(shù)據(jù)查詢操作,語法為select * from 表名;*則代表全部列名,可通過輸入列名來查詢特定數(shù)據(jù)。update set
:更新操作,語法為update 表名 set 條件A where 條件B,條件A為修改條件,條件B為修改操作。delete from
:刪除操作,語法為delect from 表名 where 條件A,條件A為刪除條件。where
:用于sql中條件判斷、條件過濾等操作。having
:類似于where,一般使用于group by之后,與where區(qū)別在于where過濾行,having過濾組。like
:用于模糊查詢,主要只針對于“字符型”字段,常用"_"和"%"這兩種通配符,前者充當占位符,后者代表匹配任意字符。order by
:用于數(shù)據(jù)排序,常用ASC升序排列和DESC降序排列。group by
:用于對字段進行分組。not
:用于判斷表達式真假,類似于java語言中boolean。and
:用于在where子句后面將多個條件結(jié)合起來。between
:用于取兩個值之間的數(shù)據(jù)范圍。lnner join
:內(nèi)連接,多表連接時只會顯示滿足條件的數(shù)據(jù)結(jié)果。left join
:左連接,多表連接時只會以左表為基準顯示左表全部數(shù)據(jù),右表只會顯示對應數(shù)據(jù),若無對應數(shù)據(jù)顯示null。right join
:右連接,與左連接相反;多表連接時只會以右表為基準顯示左表全部數(shù)據(jù),左表只會顯示對應數(shù)據(jù),若無對應數(shù)據(jù)顯示null。in
:用于嵌套語句查詢,常用語子查詢中。
四、數(shù)據(jù)庫設計
1. 數(shù)據(jù)庫三大范式
- 每個字段具有原子性不可再分。
- 建立在第一范式的基礎上,確保數(shù)據(jù)庫表列中只保存一種數(shù)據(jù),不可以把多種數(shù)據(jù)保存在一個數(shù)據(jù)庫表列中。
- 建立在地二范式的基礎上,數(shù)據(jù)不能存在傳遞關系,數(shù)據(jù)庫中每個字段和主鍵都是直接關系。
2. 數(shù)據(jù)庫規(guī)范設計
- 系統(tǒng)需求分析
- 概念結(jié)構(gòu)設計
- 邏輯結(jié)構(gòu)設計
- 物理結(jié)構(gòu)設計
- 數(shù)據(jù)庫實施
- 數(shù)據(jù)庫運維
到此這篇關于Mysql事務索引知識匯總的文章就介紹到這了,更多相關Mysql事務索引內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
CentOS7版本安裝Mysql8.0.20版本數(shù)據(jù)庫的詳細教程
這篇文章主要介紹了CentOS7版本安裝Mysql8.0.20版本數(shù)據(jù)庫的教程,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-05-05MySQL使用show?effective?grants查看權(quán)限官方解讀
這篇文章主要為大家介紹了MySQL使用show?effective?grants查看權(quán)限,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-07-07SQL使用復合索引實現(xiàn)數(shù)據(jù)庫查詢的優(yōu)化
這篇文章主要介紹了SQL使用復合索引實現(xiàn)數(shù)據(jù)庫查詢的優(yōu)化,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-05-05Mysql如何解決1251 client does not support問題
這篇文章主要介紹了Mysql如何解決1251 client does not support問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09