欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

一、索引

1.概念

索引是一種特殊的文件,包含著對(duì)數(shù)據(jù)表里所有記錄的引用指針,可以對(duì)表中的一列或者多列創(chuàng)建索引,并指定索引的類型,各類索引有各自的數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn). (這里對(duì)于索引也只是簡(jiǎn)單了解,寫了些皮毛) 更淺顯易懂的來說:數(shù)據(jù)庫(kù)的數(shù)據(jù)保存在硬盤,硬盤不知道具體保存在哪個(gè)位置,索引就是用來告訴硬盤數(shù)據(jù)在哪個(gè)位置.

2.作用

數(shù)據(jù)庫(kù)中的表、數(shù)據(jù)、索引之間的關(guān)系,類似于書架上的圖書、書籍內(nèi)容和書籍目錄的關(guān)系 索引所起的作用類似書籍目錄,可用于快速定位,檢索數(shù)據(jù) 索引對(duì)于提高數(shù)據(jù)庫(kù)的性能有很大的幫助

說明:某張表可以給一個(gè)字段或多個(gè)字段創(chuàng)建索引

使用查詢語句時(shí),根據(jù)索引字段來做條件查詢就可能使用到索引,提高查詢速度.

某些語句不能使用到索引,比如:

student(id,name,email),name創(chuàng)建索引

where name like ‘%哈哈%’ 和 name is null 不能使用索引

name=‘張三’ 能使用到

3.缺陷

索引需要占用一定的磁盤空間,插入/修改/刪除操作,索引也需要更新,數(shù)據(jù)量越大,索引更新的時(shí)間越長(zhǎng) 所以說:也不是索引建的越多越好

4.使用場(chǎng)景

要考慮對(duì)數(shù)據(jù)庫(kù)表的某列或某幾列創(chuàng)建索引,需要考慮以下幾點(diǎn):

  • 數(shù)據(jù)量較大,且經(jīng)常對(duì)這些列進(jìn)行條件查詢
  • 該數(shù)據(jù)庫(kù)表的插入操作,及對(duì)這些列的修改操作頻率較低
  • 索引會(huì)占用額外的磁盤空間

滿足以上條件時(shí),考慮對(duì)表中的這些字段創(chuàng)建索引,以提高查詢效率

反之,如果非條件查詢列,或經(jīng)常做插入,修改操作,或磁盤空間不足時(shí),不考慮創(chuàng)建索引

5.使用

創(chuàng)建主鍵約束(PRIMARY KEY)、唯一約束(UNIQUE)、外鍵約束(FORGIGN KEY)時(shí),會(huì)主動(dòng)創(chuàng)建對(duì)應(yīng)列的索引.

1.查看索引

show index from 表名;

2.創(chuàng)建索引

對(duì)于非主鍵、非唯一約束、非外鍵的字段,可以創(chuàng)建普通索引

create index 索引名 on 表名(字段名);

3.刪除索引

drop index 索引名 on 表名;

6.案例

實(shí)現(xiàn)登錄功能,數(shù)據(jù)庫(kù)有user表,username(賬號(hào)),password(密碼)

從實(shí)現(xiàn)上看:

頁(yè)面上,用戶輸入賬號(hào)密碼,Java程序接收到這個(gè)賬號(hào),這個(gè)密碼數(shù)據(jù)庫(kù)sql的實(shí)現(xiàn),就有兩種方式:

(1)根據(jù)賬號(hào)+密碼,條件查詢

(2)根據(jù)賬號(hào)查詢,Java程序獲取到這條數(shù)據(jù),比較/校驗(yàn)密碼

問題:登錄功能發(fā)現(xiàn)很慢,如何優(yōu)化?

如果sql是第一種查詢方式,創(chuàng)建賬號(hào)+密碼兩個(gè)字段的索引

第二種查詢方式,創(chuàng)建賬號(hào)一個(gè)字段的索引

二、事務(wù)

1.為什么使用事務(wù)

準(zhǔn)備測(cè)試表:

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時(shí),出現(xiàn)網(wǎng)絡(luò)錯(cuò)誤,或是數(shù)據(jù)庫(kù)掛掉了,圖圖的賬戶會(huì)減少2000,但是小美的賬戶上就沒有了增加的金額 解決方案: 使用事務(wù)來控制,保證以上兩句SQL要么全部執(zhí)行成功,要么全部執(zhí)行失敗.

2.事務(wù)的概念

事務(wù)指邏輯上的一組操作,組成這組操作的各個(gè)單元,要么全部成功,要么全部失敗. 在不同的環(huán)境中,都可以有事務(wù).對(duì)應(yīng)在數(shù)據(jù)庫(kù)中,就是數(shù)據(jù)庫(kù)事務(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.原子性:對(duì)應(yīng)一組操作(主要是更新),要么全部成功,要么全部失敗

2.一致性:一個(gè)事務(wù)里邊,多次查詢到的數(shù)據(jù)都是一樣的

3.隔離性:不同事務(wù),查詢/修改的數(shù)據(jù),是互相隔離開的 一個(gè)事務(wù),沒有提交或者回滾前,修改的數(shù)據(jù),只有自己看得到

4.持久性:事務(wù)提交,會(huì)持久化到硬盤中

關(guān)于第三點(diǎn)和第四點(diǎ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í)行上述操作之后沒有進(jìn)行commit結(jié)果顯示為:

但是在客戶端連接MySQL服務(wù)器直接查看表格數(shù)據(jù)并沒有變化:

只有在commit完成之后才會(huì)客戶端才會(huì)顯示:

到此這篇關(guān)于MySQL索引事務(wù)詳細(xì)解析的文章就介紹到這了,更多相關(guān)MySQL 索引事務(wù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

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

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

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

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

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

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

    在使用mysql的過程中,有個(gè)問題就是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ì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • MySQL下載安裝詳情圖文教程

    MySQL下載安裝詳情圖文教程

    本文通過圖文并茂的形式給大家介紹了MySQL下載安裝詳情,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    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)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-08-08
  • mysql查詢本周內(nèi)每天統(tǒng)計(jì)量按天展示的示例代碼

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

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

    MySQL表中添加時(shí)間戳的幾種方法

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

最新評(píng)論