亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

MySQL索引事務(wù)詳細(xì)解析

 更新時間:2022年01月20日 16:16:16   作者:dhdhdhdhg  
這篇文章主要介紹了MySQL數(shù)據(jù)庫索引事務(wù),索引是為了加速對表中數(shù)據(jù)行的檢索而創(chuàng)建的一種分散的存儲結(jié);事物是屬于計算機中一個很廣泛的概念,一般是指要做的或所做的事情,下面我們就一起進入文章了解具體內(nèi)容吧

一、索引

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)方法

    MySQL中union和order by同時使用的實現(xiàn)方法

    下面小編就為大家?guī)硪黄狹ySQL中union和order by同時使用的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • MySQL 8.0的關(guān)系數(shù)據(jù)庫新特性詳解

    MySQL 8.0的關(guān)系數(shù)據(jù)庫新特性詳解

    廣受歡迎的開源數(shù)據(jù)庫MySQL 8中,包括了眾多新特性,下面這篇文章主要給大家介紹了關(guān)于MySQL 8.0的關(guān)系數(shù)據(jù)庫新特性的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。
    2018-03-03
  • Mysql的longblob字段插入數(shù)據(jù)問題解決

    Mysql的longblob字段插入數(shù)據(jù)問題解決

    在使用mysql的過程中,有個問題就是mysql的優(yōu)化,mysql中l(wèi)ongblob字段在5.5版本中默認(rèn)的為1M,需要解決問題的朋友可以參考下
    2014-01-01
  • MySQL 8.0.23 主要更新一覽(新特征解讀)

    MySQL 8.0.23 主要更新一覽(新特征解讀)

    這篇文章主要介紹了MySQL 8.0.23 主要更新一覽(新特征解讀),需要的朋友可以參考下
    2021-01-01
  • MySQL SELECT?...for?update的具體使用

    MySQL SELECT?...for?update的具體使用

    本文主要介紹了MySQL的SELECT?...for?update的具體使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • MySQL下載安裝詳情圖文教程

    MySQL下載安裝詳情圖文教程

    本文通過圖文并茂的形式給大家介紹了MySQL下載安裝詳情,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08
  • MySQL 創(chuàng)建主鍵,外鍵和復(fù)合主鍵的語句

    MySQL 創(chuàng)建主鍵,外鍵和復(fù)合主鍵的語句

    MySQL 創(chuàng)建主鍵,外鍵和復(fù)合主鍵的方法,需要的朋友可以參考下。
    2009-12-12
  • MySQL?中字符集詳細(xì)介紹

    MySQL?中字符集詳細(xì)介紹

    這篇文章主要介紹了MySQL?中字符集詳細(xì)介紹,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-08-08
  • mysql查詢本周內(nèi)每天統(tǒng)計量按天展示的示例代碼

    mysql查詢本周內(nèi)每天統(tǒng)計量按天展示的示例代碼

    本文主要介紹了mysql查詢本周內(nèi)每天統(tǒng)計量按天展示的示例代碼,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • MySQL表中添加時間戳的幾種方法

    MySQL表中添加時間戳的幾種方法

    這篇文章主要介紹了MySQL表中添加時間戳的幾種方法,有張表的數(shù)據(jù)需要用同步工具同步至其他庫,需要 update_time 時間戳字段 來做增量同步,需要的朋友可以參考下
    2019-06-06

最新評論