MySQL索引事務(wù)詳細(xì)解析
一、索引
1.概念
索引是一種特殊的文件,包含著對數(shù)據(jù)表里所有記錄的引用指針,可以對表中的一列或者多列創(chuàng)建索引,并指定索引的類型,各類索引有各自的數(shù)據(jù)結(jié)構(gòu)實現(xiàn). (這里對于索引也只是簡單了解,寫了些皮毛) 更淺顯易懂的來說:數(shù)據(jù)庫的數(shù)據(jù)保存在硬盤,硬盤不知道具體保存在哪個位置,索引就是用來告訴硬盤數(shù)據(jù)在哪個位置.
2.作用
數(shù)據(jù)庫中的表、數(shù)據(jù)、索引之間的關(guān)系,類似于書架上的圖書、書籍內(nèi)容和書籍目錄的關(guān)系 索引所起的作用類似書籍目錄,可用于快速定位,檢索數(shù)據(jù) 索引對于提高數(shù)據(jù)庫的性能有很大的幫助
說明:某張表可以給一個字段或多個字段創(chuàng)建索引
使用查詢語句時,根據(jù)索引字段來做條件查詢就可能使用到索引,提高查詢速度.
某些語句不能使用到索引,比如:
student(id,name,email),name創(chuàng)建索引
where name like ‘%哈哈%’ 和 name is null 不能使用索引
name=‘張三’ 能使用到
3.缺陷
索引需要占用一定的磁盤空間,插入/修改/刪除操作,索引也需要更新,數(shù)據(jù)量越大,索引更新的時間越長 所以說:也不是索引建的越多越好
4.使用場景
要考慮對數(shù)據(jù)庫表的某列或某幾列創(chuàng)建索引,需要考慮以下幾點:
- 數(shù)據(jù)量較大,且經(jīng)常對這些列進行條件查詢
- 該數(shù)據(jù)庫表的插入操作,及對這些列的修改操作頻率較低
- 索引會占用額外的磁盤空間
滿足以上條件時,考慮對表中的這些字段創(chuàng)建索引,以提高查詢效率
反之,如果非條件查詢列,或經(jīng)常做插入,修改操作,或磁盤空間不足時,不考慮創(chuàng)建索引
5.使用
創(chuàng)建主鍵約束(PRIMARY KEY)、唯一約束(UNIQUE)、外鍵約束(FORGIGN KEY)時,會主動創(chuàng)建對應(yīng)列的索引.
1.查看索引
show index from 表名;
2.創(chuàng)建索引
對于非主鍵、非唯一約束、非外鍵的字段,可以創(chuàng)建普通索引
create index 索引名 on 表名(字段名);
3.刪除索引
drop index 索引名 on 表名;
6.案例
實現(xiàn)登錄功能,數(shù)據(jù)庫有user表,username(賬號),password(密碼)
從實現(xiàn)上看:
頁面上,用戶輸入賬號密碼,Java程序接收到這個賬號,這個密碼數(shù)據(jù)庫sql的實現(xiàn),就有兩種方式:
(1)根據(jù)賬號+密碼,條件查詢
(2)根據(jù)賬號查詢,Java程序獲取到這條數(shù)據(jù),比較/校驗密碼
問題:登錄功能發(fā)現(xiàn)很慢,如何優(yōu)化?
如果sql是第一種查詢方式,創(chuàng)建賬號+密碼兩個字段的索引
第二種查詢方式,創(chuàng)建賬號一個字段的索引
二、事務(wù)
1.為什么使用事務(wù)
準(zhǔn)備測試表:
drop table if exists accout; create table accout( id int primary key auto_increment, name varchar(20) comment '賬戶名稱', money decimal(11,2) comment '金額' ); insert into accout(name, money) values ('圖圖', 5000), ('小美', 1000);
比如說,小美向圖圖借了2000元
-- 圖圖賬戶減少2000 update accout set money=money-2000 where name = '圖圖'; -- 小美賬戶增加2000 update accout set money=money+2000 where name = '小美';
假如在執(zhí)行以上第一句SQL時,出現(xiàn)網(wǎng)絡(luò)錯誤,或是數(shù)據(jù)庫掛掉了,圖圖的賬戶會減少2000,但是小美的賬戶上就沒有了增加的金額 解決方案: 使用事務(wù)來控制,保證以上兩句SQL要么全部執(zhí)行成功,要么全部執(zhí)行失敗.
2.事務(wù)的概念
事務(wù)指邏輯上的一組操作,組成這組操作的各個單元,要么全部成功,要么全部失敗. 在不同的環(huán)境中,都可以有事務(wù).對應(yīng)在數(shù)據(jù)庫中,就是數(shù)據(jù)庫事務(wù).
3.使用
(1)開啟事務(wù):start transaction;
(2)執(zhí)行多條SQL語句
(3)回滾或提交:rollback/commit
說明:rollback即是全部失敗,commit即是全部成功
start transaction; -- 圖圖賬戶減少2000 update accout set money=money-2000 where name = '圖圖'; -- 小美賬戶增加2000 update accout set money=money+2000 where name = '小美'; commit;
4.特性
存在acid四大特性(原子性,持久性,一致性,隔離性)
1.原子性:對應(yīng)一組操作(主要是更新),要么全部成功,要么全部失敗
2.一致性:一個事務(wù)里邊,多次查詢到的數(shù)據(jù)都是一樣的
3.隔離性:不同事務(wù),查詢/修改的數(shù)據(jù),是互相隔離開的 一個事務(wù),沒有提交或者回滾前,修改的數(shù)據(jù),只有自己看得到
4.持久性:事務(wù)提交,會持久化到硬盤中
關(guān)于第三點和第四點這里做出圖像解釋:
mysql> drop table if exists accout; mysql> create table accout( -> id int primary key auto_increment, -> name varchar(20) comment '賬戶名稱', -> money decimal(11,2) comment '金額' -> ); mysql> insert into accout(name, money) values -> ('圖圖', 5000), -> ('小美',1000); mysql> update accout set money=money-2000 where name = '圖圖'; mysql> update accout set money=money+2000 where name = '小美';
在MySQL中執(zhí)行上述操作之后沒有進行commit結(jié)果顯示為:
但是在客戶端連接MySQL服務(wù)器直接查看表格數(shù)據(jù)并沒有變化:
只有在commit完成之后才會客戶端才會顯示:
到此這篇關(guān)于MySQL索引事務(wù)詳細(xì)解析的文章就介紹到這了,更多相關(guān)MySQL 索引事務(wù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL中union和order by同時使用的實現(xiàn)方法
下面小編就為大家?guī)硪黄狹ySQL中union和order by同時使用的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-12-12MySQL 8.0的關(guān)系數(shù)據(jù)庫新特性詳解
廣受歡迎的開源數(shù)據(jù)庫MySQL 8中,包括了眾多新特性,下面這篇文章主要給大家介紹了關(guān)于MySQL 8.0的關(guān)系數(shù)據(jù)庫新特性的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。2018-03-03Mysql的longblob字段插入數(shù)據(jù)問題解決
在使用mysql的過程中,有個問題就是mysql的優(yōu)化,mysql中l(wèi)ongblob字段在5.5版本中默認(rèn)的為1M,需要解決問題的朋友可以參考下2014-01-01MySQL SELECT?...for?update的具體使用
本文主要介紹了MySQL的SELECT?...for?update的具體使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05MySQL 創(chuàng)建主鍵,外鍵和復(fù)合主鍵的語句
MySQL 創(chuàng)建主鍵,外鍵和復(fù)合主鍵的方法,需要的朋友可以參考下。2009-12-12mysql查詢本周內(nèi)每天統(tǒng)計量按天展示的示例代碼
本文主要介紹了mysql查詢本周內(nèi)每天統(tǒng)計量按天展示的示例代碼,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-05-05