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

MySQL 索引與事務(wù)核心知識(shí)點(diǎn)全解

 更新時(shí)間:2026年03月26日 16:43:49   作者:炸炸魚.  
這篇文章給大家介紹MySQL 索引與事務(wù)核心知識(shí),本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧

一、MySQL 索引

1. 索引基礎(chǔ)認(rèn)知

索引是數(shù)據(jù)庫中排好序的索引值 + 數(shù)據(jù)行物理地址的列表,作用類似圖書目錄,能通過二分查找快速定位數(shù)據(jù),避免全表掃描,大幅提升查詢效率;但索引會(huì)占用額外磁盤空間,且增刪改操作會(huì)因維護(hù)索引變慢,需按需創(chuàng)建。

補(bǔ)充知識(shí)點(diǎn)

  • MySQL 默認(rèn)索引結(jié)構(gòu)是 B + 樹,查詢效率極高。
  • 索引會(huì)加快查詢,但會(huì)減慢增刪改。
  • 小表、重復(fù)值多的字段不適合建索引。

2. 索引的分類

(1)物理分類:聚簇索引 & 非聚簇索引

  • 聚簇索引:按數(shù)據(jù)物理存儲(chǔ)位置排序,多行檢索速度快(InnoDB 主鍵默認(rèn)是聚簇索引)
  • 非聚簇索引:索引與數(shù)據(jù)物理存儲(chǔ)分離,單行檢索速度快(MyISAM 默認(rèn)非聚簇索引)

補(bǔ)充知識(shí)點(diǎn)

  • 一張表只能有一個(gè)聚簇索引(主鍵)。
  • 非聚簇索引需要回表查詢,效率略低。

(2)邏輯分類(核心常用)

表格

索引類型核心特點(diǎn)適用場景
普通索引無任何限制,最基礎(chǔ)WHERE/JOIN 中頻繁出現(xiàn)的字段
唯一索引索引列值唯一,允許空值需字段唯一但可空的場景
主鍵索引特殊唯一索引,一個(gè)表僅一個(gè),不允許空值表的唯一標(biāo)識(shí)
組合索引多個(gè)字段組成,遵循最左前綴原則多條件聯(lián)合查詢
全文索引針對(duì)文本內(nèi)容檢索大文本模糊查詢

3. 索引的創(chuàng)建(標(biāo)準(zhǔn)格式 + 代碼)

(1)普通索引

標(biāo)準(zhǔn)命令格式

CREATE INDEX 索引名 ON 表名(字段名);
ALTER TABLE 表名 ADD INDEX 索引名(字段名);

代碼

-- 直接創(chuàng)建
CREATE INDEX index_name ON table_name(column(length));
-- 修改表結(jié)構(gòu)創(chuàng)建
ALTER TABLE table_name ADD INDEX index_name (column(length));
-- 建表時(shí)創(chuàng)建
CREATE TABLE `table` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` char(255) NOT NULL,
  PRIMARY KEY (`id`),
  INDEX index_name (title(50))
);

補(bǔ)充知識(shí)點(diǎn)

  • 普通索引無約束,只用于加速查詢。
  • 前綴索引只索引前 N 個(gè)字符,節(jié)省空間。

(2)唯一索引

標(biāo)準(zhǔn)命令格式

CREATE UNIQUE INDEX 索引名 ON 表名(字段名);
ALTER TABLE 表名 ADD UNIQUE INDEX 索引名(字段名);

代碼

-- 直接創(chuàng)建
CREATE UNIQUE INDEX index_name ON table_name(column(length));
-- 修改表結(jié)構(gòu)創(chuàng)建
ALTER TABLE table_name ADD UNIQUE index_name (column(length));
-- 建表時(shí)創(chuàng)建
CREATE TABLE `table` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` char(255) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE indexName (title(50))
);

補(bǔ)充知識(shí)點(diǎn)

  • 唯一索引值不可重復(fù),但允許 NULL。
  • 一個(gè)表可以創(chuàng)建多個(gè)唯一索引。

(3)主鍵索引

標(biāo)準(zhǔn)命令格式

CREATE TABLE 表名(
  字段名 類型 PRIMARY KEY AUTO_INCREMENT
);

代碼

CREATE TABLE `table_name` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` char(255) NOT NULL,
  PRIMARY KEY (`id`)
);

補(bǔ)充知識(shí)點(diǎn)

  • 主鍵索引不能為空、不能重復(fù)。
  • 一張表只能有一個(gè)主鍵。

(4)組合索引

標(biāo)準(zhǔn)命令格式

CREATE INDEX 索引名 ON 表名(字段1,字段2,字段3);

代碼

CREATE TABLE user(
  `name` varchar(9),
  `age` int(3),
  `sex` tinyint(1),
  INDEX user_index(name, age, sex)
);
-- 有效查詢
SELECT * FROM user WHERE name = '張三' AND age = 20 AND sex = 1;
-- 無效查詢
SELECT * FROM user WHERE age = 20 AND sex = 1;

補(bǔ)充知識(shí)點(diǎn)

  • 組合索引遵循最左前綴原則,必須從第一個(gè)字段開始匹配。
  • 建一個(gè)組合索引 ≈ 建多個(gè)單列索引。

(5)全文索引

標(biāo)準(zhǔn)命令格式

ALTER TABLE 表名 ADD FULLTEXT INDEX 索引名(字段名);
CREATE FULLTEXT INDEX 索引名 ON 表名(字段名);

代碼

CREATE TABLE `table` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` char(255) NOT NULL,
  `content` text NULL,
  PRIMARY KEY (`id`),
  FULLTEXT (content)
);
ALTER TABLE article ADD FULLTEXT index_content(content);
CREATE FULLTEXT INDEX index_content ON article(content);

補(bǔ)充知識(shí)點(diǎn)

  • 全文索引比 LIKE 快很多,專門用于文本搜索。
  • 只支持 CHAR、VARCHAR、TEXT 類型。

4. 索引的查看與刪除

(1)查看索引

標(biāo)準(zhǔn)命令格式

SHOW INDEX FROM 表名;

代碼

SHOW INDEX FROM tablename;
SHOW KEYS FROM tablename;
SHOW INDEX FROM renyuan\G;

(2)刪除索引

標(biāo)準(zhǔn)命令格式

DROP INDEX 索引名 ON 表名;
ALTER TABLE 表名 DROP INDEX 索引名;

代碼

ALTER TABLE 表名 DROP INDEX 索引名;
DROP INDEX 索引名 ON 表名;

5. 創(chuàng)建索引的核心原則

  1. 查多增刪改少的表適合建索引,小表無需建索引
  2. WHERE、JOIN、GROUP BY、ORDER BY 字段優(yōu)先建索引
  3. 低基數(shù)字段(性別、狀態(tài))不建索引
  4. 大字段用前綴索引
  5. 組合索引嚴(yán)格遵循最左前綴原則

二、MySQL 事務(wù)

1. 事務(wù)基礎(chǔ)認(rèn)知

事務(wù)是一組不可分割的操作,要么全部成功,要么全部回滾,保證數(shù)據(jù)安全。

  • 只有 InnoDB 支持事務(wù)
  • 只管理 INSERT/UPDATE/DELETE

補(bǔ)充知識(shí)點(diǎn)

  • 事務(wù)用于保證數(shù)據(jù)一致性,如轉(zhuǎn)賬、訂單、支付。
  • 事務(wù)失敗會(huì)自動(dòng)回滾,不會(huì)產(chǎn)生臟數(shù)據(jù)。

2. 事務(wù)的 ACID 四大特性

  • 原子性:不可分割,全成功或全失敗
  • 一致性:數(shù)據(jù)前后規(guī)則不變
  • 隔離性:并發(fā)事務(wù)互不干擾
  • 持久性:提交后永久生效

補(bǔ)充知識(shí)點(diǎn)

  • ACID 是事務(wù)的核心標(biāo)準(zhǔn)。
  • 原子性保證操作安全,一致性保證數(shù)據(jù)不亂。

3. 事務(wù)的隔離級(jí)別

InnoDB 默認(rèn):可重復(fù)讀(REPEATABLE READ)

  1. 讀未提交:臟讀
  2. 讀提交:不可重復(fù)讀
  3. 可重復(fù)讀:幻讀
  4. 串行化:無問題,但性能低

補(bǔ)充知識(shí)點(diǎn)

  • 臟讀:讀到未提交的數(shù)據(jù)
  • 不可重復(fù)讀:同一事務(wù)兩次查詢結(jié)果不同
  • 幻讀:查詢時(shí)突然多 / 少了數(shù)據(jù)

4. 事務(wù)控制語句(格式 + 代碼)

標(biāo)準(zhǔn)命令格式

BEGIN;            -- 開啟事務(wù)
COMMIT;           -- 提交
ROLLBACK;         -- 回滾
SAVEPOINT 名稱;    -- 保存點(diǎn)
SET AUTOCOMMIT=0; -- 關(guān)閉自動(dòng)提交

代碼

BEGIN;
COMMIT;
ROLLBACK;
SAVEPOINT sp1;
ROLLBACK TO sp1;
RELEASE SAVEPOINT sp1;
SET AUTOCOMMIT=0;
SET AUTOCOMMIT=1;

補(bǔ)充知識(shí)點(diǎn)

  • MySQL 默認(rèn)自動(dòng)提交,執(zhí)行 SQL 立即生效。
  • 手動(dòng)事務(wù)必須手動(dòng) COMMIT 才會(huì)保存。

事務(wù)實(shí)操示例

CREATE DATABASE IF NOT EXISTS kgc;
USE kgc;
CREATE TABLE test( id int(5)) engine=innodb;
BEGIN;
INSERT INTO test VALUE(1);
INSERT INTO test VALUE(2);
COMMIT;
BEGIN;
INSERT INTO test VALUES(3);
ROLLBACK;

三、補(bǔ)充:庫 & 表操作(格式 + 知識(shí)點(diǎn))

1. 數(shù)據(jù)庫操作

標(biāo)準(zhǔn)格式

CREATE DATABASE 庫名;
USE 庫名;
DROP DATABASE 庫名;
SHOW DATABASES;

代碼

CREATE DATABASE IF NOT EXISTS test;
USE test;

補(bǔ)充知識(shí)點(diǎn)

  • 必須 USE 庫名,否則無法操作表。
  • IF NOT EXISTS 防止重復(fù)創(chuàng)建報(bào)錯(cuò)。

2. 數(shù)據(jù)表操作

標(biāo)準(zhǔn)格式

CREATE TABLE 表名(字段 類型 約束) ENGINE=InnoDB;
DESC 表名;
SHOW TABLES;

代碼

CREATE TABLE user(
    id INT PRIMARY KEY AUTO_INCREMENT
) ENGINE=InnoDB;
DESC user;

補(bǔ)充知識(shí)點(diǎn)

  • 必須用 InnoDB 才能用事務(wù)和索引。
  • DESC 表名:快速查看表結(jié)構(gòu)。

四、最終總結(jié)

  1. 索引 = 查詢加速,有固定創(chuàng)建 / 刪除格式
  2. 事務(wù) = 數(shù)據(jù)安全,要么全成要么全滾
  3. 操作表前必須 USE 庫名
  4. 表引擎必須是 InnoDB
  5. 索引和事務(wù)要按需使用,平衡性能與安全

到此這篇關(guān)于MySQL 索引與事務(wù)核心知識(shí)點(diǎn)全解的文章就介紹到這了,更多相關(guān)myslq索引與事務(wù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL索引失效場景及解決方案

    MySQL索引失效場景及解決方案

    這篇文章主要介紹了MySQL索引失效場景及解決方案,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-07-07
  • MySQL實(shí)現(xiàn)查詢處理JSON數(shù)據(jù)的示例詳解

    MySQL實(shí)現(xiàn)查詢處理JSON數(shù)據(jù)的示例詳解

    這篇文章主要為大家詳細(xì)介紹了MySQL如何實(shí)現(xiàn)查詢處理JSON數(shù)據(jù),文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以了解一下
    2023-06-06
  • Mysql MVCC多版本并發(fā)控制詳情

    Mysql MVCC多版本并發(fā)控制詳情

    這篇文章主要介紹了Mysql MVCC多版本并發(fā)控制詳情,MVCC是一種并發(fā)控制的方法,一般在數(shù)據(jù)庫管理系統(tǒng)中,實(shí)現(xiàn)對(duì)數(shù)據(jù)庫的并發(fā)訪問,在編程語言中實(shí)現(xiàn)事務(wù)內(nèi)存,下文更多相關(guān)介紹需要的小伙伴可以參考一下
    2022-04-04
  • MySQL?中?Varchar(50)?和?varchar(500)?區(qū)別介紹

    MySQL?中?Varchar(50)?和?varchar(500)?區(qū)別介紹

    網(wǎng)上說Varchar(50)和varchar(500)存儲(chǔ)空間上是一樣的,真的是這樣嗎,基于性能考慮,是因?yàn)檫^長的字段會(huì)影響到查詢性能,本文我將帶著這兩個(gè)問題探討驗(yàn)證一下,需要的朋友可以參考下
    2024-08-08
  • MySQL中聯(lián)合主鍵的操作方式

    MySQL中聯(lián)合主鍵的操作方式

    MySQL聯(lián)合主鍵操作包括創(chuàng)建、新增和修改,創(chuàng)建時(shí)在表定義中使用PRIMARY KEY關(guān)鍵字指定多個(gè)字段,新增和修改時(shí),分別使用ALTER TABLE語句刪除舊主鍵并添加新主鍵
    2024-12-12
  • mysql求和函數(shù)使用示例

    mysql求和函數(shù)使用示例

    求和函數(shù)在某些有計(jì)算的情況下會(huì)使用到,在本將為大家介紹下mysql中時(shí)如何實(shí)現(xiàn)求和的,感興趣的朋友可以參考下,希望對(duì)大家有所幫助
    2013-09-09
  • 通過MySQL優(yōu)化Discuz!的熱帖翻頁的技巧

    通過MySQL優(yōu)化Discuz!的熱帖翻頁的技巧

    這篇文章主要介紹了通過MySQL優(yōu)化Discuz!的熱帖翻頁的技巧,包括更新索引來降低服務(wù)器負(fù)載等方面,需要的朋友可以參考下
    2015-05-05
  • 最新評(píng)論

    正蓝旗| 东城区| 惠州市| 山阳县| 章丘市| 钦州市| 迁安市| 兴安盟| 马尔康县| 乡宁县| 吐鲁番市| 西藏| 洪泽县| 密云县| 会昌县| 军事| 昭通市| 安阳县| 阿克苏市| 霍林郭勒市| 正镶白旗| 应用必备| 海伦市| 隆化县| 五大连池市| 高邮市| 宣武区| 延吉市| 攀枝花市| 大足县| 崇礼县| 拜泉县| 建宁县| 南岸区| 西乡县| 榕江县| 莲花县| 蓬溪县| 福海县| 彩票| 玉屏|