国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【MySQL】一文帶你了解數(shù)據(jù)庫索引與事務

這篇具有很好參考價值的文章主要介紹了【MySQL】一文帶你了解數(shù)據(jù)庫索引與事務。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1. 索引的概念

數(shù)據(jù)庫索引是一種提高數(shù)據(jù)庫查詢效率的數(shù)據(jù)結(jié)構(gòu)。它可以快速地定位和訪問數(shù)據(jù)庫中的數(shù)據(jù),從而大大提高數(shù)據(jù)庫查詢的速度和效率。數(shù)據(jù)庫索引可以根據(jù)不同的查詢需求構(gòu)造多個索引,以最大化提高查詢效率。
數(shù)據(jù)庫索引基于各種字段來創(chuàng)建,在查詢時可以通過索引直接找到滿足條件的數(shù)據(jù),而不需要掃描整個數(shù)據(jù)表。數(shù)據(jù)庫索引可以分為主鍵索引、唯一索引、普通索引和全文索引等類型,每種類型的索引具有不同的特點和應用場景。

2.索引的創(chuàng)建與使用

數(shù)據(jù)庫索引可以基于各種字段創(chuàng)建,但通?;诓樵冾l率高、查詢條件復雜或者需要排序的字段來創(chuàng)建索引。
常用的索引字段包括主鍵、唯一鍵、外鍵、常用的查詢字段等。

2.1 自動創(chuàng)建對應列的索引

創(chuàng)建主鍵約束(PRIMARY KEY)、唯一約束(UNIQUE)、外鍵約束(FOREIGN KEY)時,會自動創(chuàng)建對應列的索引。

-- 查看索引
show index from 表名;
mysql> create table book(id int primary key, name varchar(10), price int);
Query OK, 0 rows affected (0.02 sec)

mysql> show index from book;
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| book  |          0 | PRIMARY  |            1 | id          | A         |           0 |     NULL | NULL   |      | BTREE      |         |               |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
1 row in set (0.00 sec)

mysql> drop table book;
Query OK, 0 rows affected (0.01 sec)

mysql> create table book(id int unique, name varchar(10), price int);
Query OK, 0 rows affected (0.01 sec)

mysql> show index from book;
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| book  |          0 | id       |            1 | id          | A         |           0 |     NULL | NULL   | YES  | BTREE      |         |               |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+

2.2 自己創(chuàng)建普通索引

--自己創(chuàng)建的索引
create index 索引名 on 表名(字段名);
mysql> create table book(id int, name varchar(10), price int);
Query OK, 0 rows affected (0.02 sec)

mysql> show index from book;
Empty set (0.00 sec)

mysql> create index idx_book_id on book(id);
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> show index from book;
+-------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name    | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| book  |          1 | idx_book_id |            1 | id          | A         |           0 |     NULL | NULL   | YES  | BTREE      |         |               |
+-------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+

2.3 刪除索引

-- 刪除
drop index 索引名 on 表名;
mysql> show index from book;
+-------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name    | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| book  |          1 | idx_book_id |            1 | id          | A         |           0 |     NULL | NULL   | YES  | BTREE      |         |               |
+-------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
1 row in set (0.00 sec)

mysql> drop index idx_book_id on book;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> show index from book;
Empty set (0.00 sec)

2.4 索引查詢

使用索引查詢數(shù)據(jù)和正常查詢一樣,但索引保存的數(shù)據(jù)結(jié)構(gòu)主要為B+樹,及hash的方式,所以當數(shù)據(jù)非常多的時候,查詢速度將會大大增加。

mysql> insert into book values(1,'西游'),
    -> (2,'三國'),
    -> (3,'水滸'),
    -> (4,'紅樓'),
    -> (5,'0'),
    -> (6,'1'),
    -> (7,'2');
Query OK, 7 rows affected (0.01 sec)
Records: 7  Duplicates: 0  Warnings: 0

mysql> select * from book where id = 4;
+------+------+
| id   | name |
+------+------+
|    4 | 紅樓 |
+------+------+
1 row in set (0.00 sec)

3. 索引的弊端

數(shù)據(jù)庫索引可以提高查詢效率,但同時也會增加數(shù)據(jù)表的存儲空間和更新數(shù)據(jù)的時間成本。因此在設(shè)計數(shù)據(jù)庫時,需要根據(jù)實際情況合理地創(chuàng)建索引,以保證查詢效率的同時不影響數(shù)據(jù)更新和插入的速度。
如果表中的數(shù)據(jù)經(jīng)常被修改,索引也需要隨之更新,這會帶來一定的性能開銷。因此,對于不經(jīng)常使用或值域比較小的字段,不建議創(chuàng)建索引。
同時,一個表的索引可以不只一個,但也應該避免過多的索引,否則會降低數(shù)據(jù)庫的性能。

4. 事務的概念

事務就是邏輯上的一組操作,要么全部成功,要么全部失敗,如果有一個操作失敗,整個事務就會回滾,恢復到執(zhí)行前的狀態(tài)。保證了數(shù)據(jù)的一致性和可靠性。同時,事務也可以提高數(shù)據(jù)庫的并發(fā)性能,并且保證數(shù)據(jù)的唯一性和隔離性。因此,在高并發(fā)、高可用的應用場景下,使用事務是非常重要的。

5. 事務的特性

事務分為四個重要的ACID屬性,即:

  1. 原子性(Atomicity):一個事務中的所有操作,要么全部執(zhí)行成功,要么全部失敗回滾,如同原子一樣不可分割。
  2. 一致性(Consistency):事務執(zhí)行前后,數(shù)據(jù)的完整性和一致性必須保持一致。
  3. 隔離性(Isolation):事務執(zhí)行的過程中,對數(shù)據(jù)的操作相互隔離,每個事務都像在獨立的環(huán)境中執(zhí)行一樣,以避免數(shù)據(jù)操作之間的相互干擾。
  4. 持久性(Durability):事務一旦提交,它對數(shù)據(jù)庫中的數(shù)據(jù)狀態(tài)的改變是永久性的,即使系統(tǒng)崩潰也不會對其有影響,數(shù)據(jù)將一直保持到下一個事務修改它為止。

6. 事務的使用

  1. 開啟事務:start transaction;
  2. 執(zhí)行多條SQL語句
  3. 回滾或提交:rollback/commit;

rollback即是全部失敗,commit即是全部成功。文章來源地址http://www.zghlxwxcb.cn/news/detail-490563.html

start transaction;
-- 阿里巴巴賬戶減少2000
update accout set money=money-2000 where name = '阿里巴巴';
-- 四十大盜賬戶增加2000
update accout set money=money+2000 where name = '四十大盜';
commit;

到了這里,關(guān)于【MySQL】一文帶你了解數(shù)據(jù)庫索引與事務的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • 【MySQL】一文帶你徹底了解事務機制

    【MySQL】一文帶你徹底了解事務機制

    我們設(shè)想一個場景,這個場景中我們需要插入多條相關(guān)聯(lián)的數(shù)據(jù)到數(shù)據(jù)庫,不幸的是,這個過程可能會遇到下面這些問題: 數(shù)據(jù)庫中途突然因為某些原因掛掉了。 客戶端突然因為網(wǎng)絡(luò)原因連接不上數(shù)據(jù)庫了。 并發(fā)訪問數(shù)據(jù)庫時,多個線程同時寫入數(shù)據(jù)庫,覆蓋了彼此的更改

    2024年02月09日
    瀏覽(15)
  • MySQL:事務、索引、用戶管理、備份、數(shù)據(jù)庫設(shè)計(三大范式)

    MySQL:事務、索引、用戶管理、備份、數(shù)據(jù)庫設(shè)計(三大范式)

    事務 (transaction):要么都成功,要么都失敗。 核心 :將一組 SQL 放在一個批次中去執(zhí)行。 原則 ACID :原子性(atomicity)、一致性(consistency)、隔離性(isolation)、持久性(durability)。 原子性 :一個事務中的所有步驟 要么都 成功, 要么都 失敗,不能只成功一個步驟。 一致性 :包括

    2023年04月26日
    瀏覽(21)
  • 一文帶你了解MySQL之事務隔離級別和MVCC

    一文帶你了解MySQL之事務隔離級別和MVCC

    為了我們學習的順利進行,我們這邊創(chuàng)建一張 hero 表 這里需要注意的是,我們的 hero 表的主鍵是 number ,而不是 id ,主要是后邊要用到的 事務id 做一下區(qū)別,然后我們給這個表里插入一條數(shù)據(jù) 現(xiàn)在我們表里的數(shù)據(jù)就是這樣: 我們知道 MySQL 是 CS 架構(gòu)的軟件,若干個客戶端與

    2024年02月08日
    瀏覽(24)
  • 一文帶你了解MySQL之B+樹索引的使用

    一文帶你了解MySQL之B+樹索引的使用

    前言 我們上一篇文章詳細的了InnoDB存儲引擎的B+樹索引,我們必須知道下邊這些結(jié)論: 每個索引都對應1棵B+樹,B+樹分為好多層,最下邊一層是葉字節(jié)點,其余的是內(nèi)節(jié)點(非葉子節(jié)點)。所有用戶戶記錄都存儲在B+樹的葉子節(jié)點,所有目錄項記錄都存儲在內(nèi)節(jié)點。 InnoDB存儲

    2024年02月06日
    瀏覽(20)
  • 【MySQL】數(shù)據(jù)庫中這么多數(shù)據(jù)類型你真的了解嗎?一文看懂不同數(shù)據(jù)類型有何區(qū)別

    【MySQL】數(shù)據(jù)庫中這么多數(shù)據(jù)類型你真的了解嗎?一文看懂不同數(shù)據(jù)類型有何區(qū)別

    創(chuàng)建表t1,將name列數(shù)據(jù)類型設(shè)置為要tinyint 插入屬性值:由于這里是tinyint類型,取值范圍是【-128–127】,當插入這個范圍內(nèi)的數(shù)據(jù)顯示成功,范圍之外失敗 使用tinyint unsigned類型創(chuàng)建表t2 無符號類型取值范圍【0,255】,這點與C/C++一樣 2.1.1 小結(jié) MySQL對于數(shù)據(jù)類型不合法行為采

    2024年02月13日
    瀏覽(23)
  • 【數(shù)據(jù)庫】索引和事務

    【數(shù)據(jù)庫】索引和事務

    目錄 1.索引 1.1關(guān)于索引 索引是什么? 為什么要有索引? 索引的作用? 索引的優(yōu)點和缺點? 1.2索引類型及創(chuàng)建 索引的分類 創(chuàng)建索引 1.3索引的數(shù)據(jù)結(jié)構(gòu) 1.4索引覆蓋 2.事務 2.1關(guān)于事務 概念 事務的使用 2.2事務的特性 2.3事務的隔離級別 read uncommitted read committed repaeteble read se

    2023年04月25日
    瀏覽(38)
  • 【數(shù)據(jù)庫】索引與事務

    【數(shù)據(jù)庫】索引與事務

    目錄 1、索引 1.1、概念 1.2、索引的作用 1.3、 索引的缺點 1.4、數(shù)據(jù)庫中實現(xiàn)索引的數(shù)據(jù)結(jié)構(gòu) 1.4.1、B樹/B-樹 1.4.2、B+樹? ?1.4.3、回表 1.5、使用場景 1.6、索引的使用? 1.6.1、查看索引 1.6.2、創(chuàng)建索引? 1.6.3、 刪除索引 1.7、索引的分類 2、事務 2.1、為什么使用事務 2.2、事務的概

    2024年02月02日
    瀏覽(22)
  • 【MySQL】一文帶你了解檢索數(shù)據(jù)

    【MySQL】一文帶你了解檢索數(shù)據(jù)

    ?? 博客主頁:博主鏈接 ?? 本文由 M malloc 原創(chuàng),首發(fā)于 CSDN?? ?? 學習專欄推薦:LeetCode刷題集! ?? 歡迎點贊 ?? 收藏 ?留言 ?? 如有錯誤敬請指正! ?? 未來很長,值得我們?nèi)Ρ几案篮玫纳? ------------------??分割線??------------------------- —————————

    2024年02月09日
    瀏覽(20)
  • 【MySQL】一文帶你了解過濾數(shù)據(jù)

    【MySQL】一文帶你了解過濾數(shù)據(jù)

    ?? 博客主頁:博主鏈接 ?? 本文由 M malloc 原創(chuàng),首發(fā)于 CSDN?? ?? 學習專欄推薦:LeetCode刷題集! ?? 歡迎點贊 ?? 收藏 ?留言 ?? 如有錯誤敬請指正! ?? 未來很長,值得我們?nèi)Ρ几案篮玫纳? ??大家好呀,今天是我第N次寫MySQL,也是最近才學習MySQL,也想著記錄

    2024年02月09日
    瀏覽(26)
  • 【MySQL】一文帶你了解數(shù)據(jù)過濾

    【MySQL】一文帶你了解數(shù)據(jù)過濾

    ?? 博客主頁:博主鏈接 ?? 本文由 M malloc 原創(chuàng),首發(fā)于 CSDN?? ?? 學習專欄推薦:LeetCode刷題集! ?? 歡迎點贊 ?? 收藏 ?留言 ?? 如有錯誤敬請指正! ?? 未來很長,值得我們?nèi)Ρ几案篮玫纳? ??大家好呀,今天是我第N次寫MySQL,也是最近才學習MySQL,也想著記錄

    2024年02月09日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包