最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間: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ù)

準備測試表:

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ù)詳細解析的文章就介紹到這了,更多相關(guān)MySQL 索引事務(wù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 通過SqlCmd執(zhí)行超大SQL文件的方法

    通過SqlCmd執(zhí)行超大SQL文件的方法

    這篇文章主要介紹了sql?server?與?mysql?中常用的SQL語句區(qū)別,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-12-12
  • navicat連接mysql時出現(xiàn)1045錯誤的解決方法

    navicat連接mysql時出現(xiàn)1045錯誤的解決方法

    這篇文章主要為大家詳細介紹了navicat連接mysql時出現(xiàn)1045錯誤的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • mysql?explain中key_len的含義以及計算方法

    mysql?explain中key_len的含義以及計算方法

    通常在優(yōu)化SQL查詢的時候,我們都會使用explain分析SQL執(zhí)行計劃,下面這篇文章主要給大家介紹了關(guān)于mysql?explain中key_len的含義以及計算方法的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-03-03
  • 幾個縮減MySQL以節(jié)省磁盤空間的建議

    幾個縮減MySQL以節(jié)省磁盤空間的建議

    這篇文章主要介紹了幾個縮減MySQL以節(jié)省磁盤空間的建議,主要從表結(jié)構(gòu)和存儲內(nèi)容兩個方面來談減容,需要的朋友可以參考下
    2015-05-05
  • MybatisPlus攔截器如何實現(xiàn)數(shù)據(jù)表分表

    MybatisPlus攔截器如何實現(xiàn)數(shù)據(jù)表分表

    為了解決MySQL中大數(shù)據(jù)量的查詢效率問題,采用水平拆分策略,通過取模運算確定表后綴,實現(xiàn)數(shù)據(jù)的有效管理,設(shè)計分表時,需利用線程變量存取請求參數(shù),并通過攔截器確定操作的具體表名,從而優(yōu)化數(shù)據(jù)處理性能,此方法適用于業(yè)務(wù)表數(shù)據(jù)量大或快速增長的場景
    2024-11-11
  • MySQL對標準SQL的擴展方式

    MySQL對標準SQL的擴展方式

    MySQL對標準SQL的擴展包括磁盤上的數(shù)據(jù)組織方式、通用語言語法、SQL語句語法、數(shù)據(jù)類型、函數(shù)和運算符等,這些擴展使得MySQL在某些方面與其他SQL數(shù)據(jù)庫管理系統(tǒng)不同
    2025-02-02
  • MySQL數(shù)據(jù)庫表的合并與分區(qū)實現(xiàn)介紹

    MySQL數(shù)據(jù)庫表的合并與分區(qū)實現(xiàn)介紹

    今天我們來聊聊處理大數(shù)據(jù)時Mysql的存儲優(yōu)化。當數(shù)據(jù)達到一定量時,一般的存儲方式就無法解決高并發(fā)問題了。最直接的MySQL優(yōu)化就是分區(qū)分表,以下是我個人對分區(qū)分表的筆記
    2022-09-09
  • Mysql利用group by分組排序

    Mysql利用group by分組排序

    這篇文章主要為大家詳細介紹了Mysql利用group by分組排序,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • MySQL入門教程(七)之視圖

    MySQL入門教程(七)之視圖

    視圖是從一個或多個表中導(dǎo)出來的虛擬表。視圖就像一個窗口,通過這個窗口可以看到系統(tǒng)專門提供的數(shù)據(jù)。本文給大家介紹MySQL入門教程(七)之視圖,需要的朋友參考下
    2016-04-04
  • MySQL使用binlog日志恢復(fù)數(shù)據(jù)的方法步驟

    MySQL使用binlog日志恢復(fù)數(shù)據(jù)的方法步驟

    binlog日志是用于記錄所有修改數(shù)據(jù)庫內(nèi)容的操作,本文主要介紹了MySQL使用binlog日志恢復(fù)數(shù)據(jù)的方法步驟,具有一定的參考價值,感興趣的可以了解一下
    2025-03-03

最新評論

什邡市| 安新县| 全椒县| 雅安市| 宜章县| 连南| 乐至县| 临安市| 祥云县| 龙门县| 海丰县| 体育| 临江市| 驻马店市| 东城区| 临汾市| 武强县| 连江县| 平和县| 漯河市| 阿拉善右旗| 保德县| 凉山| 南江县| 广水市| 丹东市| 肥乡县| 大邑县| 永兴县| 平定县| 波密县| 马山县| 宣武区| 武夷山市| 东至县| 两当县| 南丰县| 六盘水市| 拜泉县| 通渭县| 忻州市|