Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > mysql索引与事务

MySQL 索引与事务核心知识点全解

作者:炸炸鱼.

这篇文章给大家介绍MySQL 索引与事务核心知识,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧

一、MySQL 索引

1. 索引基础认知

索引是数据库中排好序的索引值 + 数据行物理地址的列表,作用类似图书目录,能通过二分查找快速定位数据,避免全表扫描,大幅提升查询效率;但索引会占用额外磁盘空间,且增删改操作会因维护索引变慢,需按需创建。

补充知识点

2. 索引的分类

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

补充知识点

(2)逻辑分类(核心常用)

表格

索引类型核心特点适用场景
普通索引无任何限制,最基础WHERE/JOIN 中频繁出现的字段
唯一索引索引列值唯一,允许空值需字段唯一但可空的场景
主键索引特殊唯一索引,一个表仅一个,不允许空值表的唯一标识
组合索引多个字段组成,遵循最左前缀原则多条件联合查询
全文索引针对文本内容检索大文本模糊查询

3. 索引的创建(标准格式 + 代码)

(1)普通索引

标准命令格式

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

代码

-- 直接创建
CREATE INDEX index_name ON table_name(column(length));
-- 修改表结构创建
ALTER TABLE table_name ADD INDEX index_name (column(length));
-- 建表时创建
CREATE TABLE `table` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` char(255) NOT NULL,
  PRIMARY KEY (`id`),
  INDEX index_name (title(50))
);

补充知识点

(2)唯一索引

标准命令格式

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

代码

-- 直接创建
CREATE UNIQUE INDEX index_name ON table_name(column(length));
-- 修改表结构创建
ALTER TABLE table_name ADD UNIQUE index_name (column(length));
-- 建表时创建
CREATE TABLE `table` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` char(255) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE indexName (title(50))
);

补充知识点

(3)主键索引

标准命令格式

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`)
);

补充知识点

(4)组合索引

标准命令格式

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;

补充知识点

(5)全文索引

标准命令格式

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);

补充知识点

4. 索引的查看与删除

(1)查看索引

标准命令格式

SHOW INDEX FROM 表名;

代码

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

(2)删除索引

标准命令格式

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

代码

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

5. 创建索引的核心原则

  1. 查多增删改少的表适合建索引,小表无需建索引
  2. WHERE、JOIN、GROUP BY、ORDER BY 字段优先建索引
  3. 低基数字段(性别、状态)不建索引
  4. 大字段用前缀索引
  5. 组合索引严格遵循最左前缀原则

二、MySQL 事务

1. 事务基础认知

事务是一组不可分割的操作,要么全部成功,要么全部回滚,保证数据安全。

补充知识点

2. 事务的 ACID 四大特性

补充知识点

3. 事务的隔离级别

InnoDB 默认:可重复读(REPEATABLE READ)

  1. 读未提交:脏读
  2. 读提交:不可重复读
  3. 可重复读:幻读
  4. 串行化:无问题,但性能低

补充知识点

4. 事务控制语句(格式 + 代码)

标准命令格式

BEGIN;            -- 开启事务
COMMIT;           -- 提交
ROLLBACK;         -- 回滚
SAVEPOINT 名称;    -- 保存点
SET AUTOCOMMIT=0; -- 关闭自动提交

代码

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

补充知识点

事务实操示例

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;

三、补充:库 & 表操作(格式 + 知识点)

1. 数据库操作

标准格式

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

代码

CREATE DATABASE IF NOT EXISTS test;
USE test;

补充知识点

2. 数据表操作

标准格式

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

代码

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

补充知识点

四、最终总结

  1. 索引 = 查询加速,有固定创建 / 删除格式
  2. 事务 = 数据安全,要么全成要么全滚
  3. 操作表前必须 USE 库名
  4. 表引擎必须是 InnoDB
  5. 索引和事务要按需使用,平衡性能与安全

到此这篇关于MySQL 索引与事务核心知识点全解的文章就介绍到这了,更多相关myslq索引与事务内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文