Mysql

关注公众号 jb51net

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

mysql索引和事务的使用解读

作者:阿萨德791

这篇文章主要介绍了mysql索引和事务的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

mysql索引介绍

索引概述

在 MySQL 中,索引是一种特殊的数据结构,它能够显著提高数据库的查询效率。简单来说,索引就像是书籍的目录,通过目录可以快速找到所需内容的位置,而不必逐页翻阅整本书。在数据库中,索引能够帮助数据库系统快速定位到表中符合条件的数据行,从而减少了数据的扫描量,提高了查询速度。

索引本质上是一种排序好的数据结构,它存储了表中某些列的值以及这些值对应的物理地址。当执行查询时,数据库系统首先在索引中查找符合条件的值,然后根据索引中记录的物理地址直接访问对应的数据行,这样就避免了全表扫描,大大提高了查询效率。

索引作用

索引在数据库中起着至关重要的作用,主要体现在以下几个方面:

索引分类

MySQL 提供了多种类型的索引,每种索引都有其特定的应用场景。

下面介绍几种常见的索引类型:

普通索引

普通索引是最基本的索引类型,它没有任何特殊的限制。普通索引可以创建在单个列上,也可以创建在多个列上(组合索引)。创建普通索引的目的主要是为了提高查询效率。

创建普通索引的语法如下:

CREATE INDEX index_name ON table_name(column_name);
CREATE TABLE table_name ( column1 datatype, column2 datatype, ... INDEX index_name (column_name) );

唯一索引

唯一索引与普通索引类似,但它的主要特点是索引列的值必须唯一,即不允许有重复值。唯一索引可以包含 NULL 值,但每个 NULL 值被视为唯一的。唯一索引通常用于确保数据的唯一性,例如用户表中的邮箱地址、手机号码等字段。

创建唯一索引的语法如下:

CREATE UNIQUE INDEX index_name ON table_name(column_name);
CREATE TABLE table_name ( column1 datatype, column2 datatype, ... UNIQUE INDEX index_name (column_name) );

主键索引

主键索引是一种特殊的唯一索引,它必须唯一标识表中的每一行数据,且不能包含 NULL 值。每个表只能有一个主键索引。主键索引通常用于定义表的主键,例如用户表中的用户 ID 字段。

创建主键索引的语法如下:

ALTER TABLE table_name ADD PRIMARY KEY (column_name);
CREATE TABLE table_name ( column1 datatype PRIMARY KEY, column2 datatype, ... );

组合索引(最左前缀)

组合索引是指在多个列上创建的索引。组合索引的查询效率更高,但它的使用需要遵循 “最左前缀” 原则。最左前缀原则是指在使用组合索引进行查询时,MySQL 会从左到右依次使用索引中的列,直到遇到第一个不满足条件的列为止。

例如,在列(col1, col2, col3)上创建组合索引,查询条件为WHERE col1 = 'value1' AND col2 = 'value2'时,会使用组合索引;但查询条件为WHERE col2 = 'value2' AND col3 = 'value3'时,不会使用组合索引,因为没有从最左边的列开始。

创建组合索引的语法如下:

CREATE INDEX index_name ON table_name(column1, column2, column3);
CREATE TABLE table_name ( column1 datatype, column2 datatype, column3 datatype, ... INDEX index_name (column1, column2, column3) );

全文索引

全文索引是一种特殊的索引类型,它主要用于在文本数据中进行全文搜索。全文索引可以快速定位包含特定关键词的文本数据,适用于大量文本数据的搜索场景,如文章内容搜索、产品描述搜索等。

需要注意的是,全文索引只适用于 MyISAM 和 InnoDB 存储引擎,并且只能用于 CHAR、VARCHAR 和 TEXT 类型的列。

创建全文索引的语法如下:

CREATE FULLTEXT INDEX index_name ON table_name(column_name);
CREATE TABLE table_name ( column1 datatype, column2 datatype, ... FULLTEXT INDEX index_name (column_name) );

使用全文索引进行搜索的语法如下:

SELECT * FROM table_name WHERE MATCH(column_name) AGAINST('search_keyword');

创建索引的原则

在数据库中创建索引时,需要遵循一定的原则,以确保索引的有效性和合理性。以下是一些创建索引的基本原则:

CREATE INDEX index_name ON table_name(column_name(length));

其中,length 表示前缀的长度。

数据库建立索引的原则

确定针对该表的操作是大量的查询操作还是大量的增删改操作

索引建立的原则

索引查询是数据库中重要的记录查询方法,要不要建立索引以及在那些字段上建立索引都要和实际数据库系统的查询要求结合来考虑下面给出实际生产环境中的一些通用的原则:

在经常存取的多个列上建立复合索引,但要注意复合索引的建立顺序要按照

查看索引

在 MySQL 中,可以使用以下几种方法查看表中的索引:

使用 SHOW INDEX 语句

SHOW INDEX FROM table_name;

该语句会返回表中所有索引的详细信息,包括索引名称、索引类型、索引所在的列等。

使用 SHOW CREATE TABLE 语句

SHOW CREATE TABLE table_name;

该语句会返回创建表的 SQL 语句,其中包含了表的结构和索引信息。

查询 information_schema.statistics 表

SELECT * FROM information_schema.statistics WHERE table_name = 'table_name';

该语句会返回表中所有索引的详细信息,包括索引名称、索引类型、索引所在的列等。

删除索引

在 MySQL 中,可以使用以下语法删除索引:

DROP INDEX index_name ON table_name;
ALTER TABLE table_name DROP PRIMARY KEY;

需要注意的是,删除索引会影响依赖该索引的查询性能,因此在删除索引之前,应该仔细评估其影响。

mysql事务

事务概述

在 MySQL 中,事务是一组不可分割的 SQL 语句序列,这些语句要么全部执行成功,要么全部执行失败。事务是数据库管理系统中实现数据一致性和完整性的重要机制。

事务具有四个基本特性,通常称为 ACID 特性:

mysql事务处理的俩种方法

MySQL 提供了两种处理事务的方法:隐式事务和显式事务。

隐式事务

隐式事务是指 MySQL 自动为每条 SQL 语句创建一个事务,并在语句执行完成后自动提交或回滚。在隐式事务模式下,每条 SQL 语句都是一个独立的事务,它们之间没有任何关联。

MySQL 默认采用隐式事务模式。在这种模式下,每条 SQL 语句执行后都会自动提交,除非发生错误时会自动回滚。例如:

INSERT INTO users (name, age) VALUES ('John', 30);
UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;

在上面的例子中,每条 SQL 语句都是一个独立的事务,它们之间没有任何关联。如果第一条 INSERT 语句执行成功,而第二条 UPDATE 语句执行失败,第一条语句的修改不会被回滚。

隐式事务适用于不需要保证多个 SQL 语句原子性的场景,例如简单的查询和单条数据的插入、更新操作。

显式事务

显式事务是指用户手动控制事务的开始、提交和回滚。在显式事务模式下,用户可以将多条 SQL 语句组合成一个事务,确保这些语句要么全部执行成功,要么全部执行失败。

在 MySQL 中,可以使用以下语句来管理显式事务:

下面是一个显式事务的示例:

START TRANSACTION;
INSERT INTO users (name, age) VALUES ('John', 30);
UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;
INSERT INTO transactions (user_id, amount, type) VALUES (1, 100, 'withdrawal'); COMMIT;

简单介绍msyql事务处理主要方法(俩种)

用BEGIN,ROLLBACK,COMMIT来实现

直接用SET来改变MySQL的自动提交模式

SET AUTOCOMMIT=0禁止自动提交
SET AUTOCOMMIT=1开启自动提交

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

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