MySQL索引及事物

目录

一、数据库索引

1.索引概念

2.索引作用

3.创建索引原则

二、索引的分类及创建

1.普通索引

(1)直接创建索引

(2)修改表结构添加索引语法

(3)创建表结构时,同时创建索引

2.唯一索引

(1)创建唯一索引语法

(2)修改表结构添加唯一索引 

(3)创建表同时创建索引

3.主键索引

4.组合索引(最左原则)

5.全文索引

三、事物

1.事务的概述    

 2.事务ACID特性

(1)原子性(Atomicity)

(2)一致性(Consistency)

(3)隔离性(Isolation)

(4)持久性(Durability)


一、数据库索引

1.索引概念

  • 索引是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址(类似于C语言的链表通过指针指向数据记录的内存地址)
  • 使用索引后可以不用扫描全表来定位某行的数据,而是先通过索引表找到该行数据对应的物理地址然后访问相应的数据,因此能加快数据库的查询速度。
  • 索引就好比是一本书的目录,可以根据目录中的页码快速找到所需的内容。
  • 索引是表中一列或者若干列值排序的方法
  • 建立索引的目的是加快对表中记录的查找或排序

2.索引作用

       数据库利用各种各样的快速定位技术,能够大大提高查询效率。特别是当数据量非常大,查询涉及多个表时,使用索引往往能使查询速度加快成千上万倍。

优点

  • 设置了合适的索引之后,数据库利用各种快速定位技术,能够大大加快查询速度,这是创建索引的最主要的原因。
  • 当表很大或查询涉及到多个表时,使用索引可以成千上万倍地提高查询速度。
  • 可以降低数据库的IO成本,并且索引还可以降低数据库的排序成本。
  • 通过创建唯一性索引,可以保证数据表中每一行数据的唯一性。
  • 可以加快表与表之间的连接。
  • 在使用分组和排序时,可大大减少分组和排序的时间。

3.创建索引原则

 索引查询是数据库中重要的记录查询方法,要不要建立索引以及在那些字段上建立索引都要和实际数据库系统的查询要求结合来考虑。

索引建立的原则:

  • 表的主键、外键必须有索引。因为主键具有唯一性,外键关联的是子表的主键,查询时可以快速定位。
  • 记录数超过300行的表应该有索引。如果没有索引,需要把表遍历一遍,会严重影响数据库的性能。
  • 经常与其他表进行连接的表,在连接字段上应该建立索引。
  • 唯一性太差的字段不适合建立索引。
  • 更新太频繁地字段不适合创建索引。
  • 经常出现在 where 子句中的字段,特别是大表的字段,应该建立索引。索引应该建在选择性高的字段上。
  • 索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引。

二、索引的分类及创建

1.普通索引

(1)直接创建索引

mysql> create database auth;
Query OK, 1 row affected (0.00 sec)mysql> use auth;
Database changedmysql> create table users(id int(10),user_name char(20),user_pass char(50));
Query OK, 0 rows affected (0.02 sec)
mysql> insert into users values(1,'aaa','pwd123');
Query OK, 1 row affected (0.01 sec)
mysql> insert into users values(2,'bbb','pwd123');
Query OK, 1 row affected (0.00 sec)
mysql> insert into users values(3,'ccc','pwd123');
Query OK, 1 row affected (0.00 sec)mysql> create index xxx on users(user_name(15));    (直接创建索引)
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

 xxx :索引名称

 users(user_name(15)):users表,user_name表中的列,15索引长度。

查看索引的方式:

mysql> show create table users\G;
或
mysql> show index from users\G;

(2)修改表结构添加索引语法

mysql> alter table users add index yyy (user_pass(30));
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

备注:
30是定义字符长度,只能比初始值小,不能比初始值大。

(3)创建表结构时,同时创建索引

CREATE TABLE table01 ( 
id int(11) NOT NULL AUTO_INCREMENT , 
title char(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL , 
content text CHARACTER SET utf8 COLLATE utf8_general_ci NULL , 
time int(10) NULL DEFAULT NULL , 
PRIMARY KEY (id), 
INDEX index_table01_title (title(11)) 
);

2.唯一索引

(1)创建唯一索引语法

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

(2)修改表结构添加唯一索引 

mysql> alter table t1 add unique fff(id);
Query OK, 0 rows affected, 1 warning (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 1

(3)创建表同时创建索引

mysql> create table t2 ( id int(10) not null, name char(20), sex char(2),  unique ddd (id) );
Query OK, 0 rows affected (0.00 sec)

3.主键索引

(1)创建主索引语法

mysql> create table t3 (id int(10),name char(20),primary key (id));
Query OK, 0 rows affected (0.01 sec)

(2)

4.组合索引(最左原则)

mysql> create table t4 (id int(10),name char(20),age int(2),index ggg(id,name,age));
Query OK, 0 rows affected (0.02 sec)

组合索引查找方式:

mysql> select * from t4 where id='10' and name='zhansan' and age=16;

注意:
在select语句中where依次从左往右执行。若索引组合是index(id,name,age)。在查询语句中也应该是id,name,age的顺序必须和索引顺序一致,否则无效。

5.全文索引

(1)直接创建索引语法

mysql> create fulltext index hhh on t4 (name);
Query OK, 0 rows affected, 1 warning (0.08 sec)
Records: 0  Duplicates: 0  Warnings: 1

(2)修改表结构添加全文索引

mysql> alter table t1 add fulltext xxx(name);
Query OK, 0 rows affected, 1 warning (0.09 sec)
Records: 0  Duplicates: 0  Warnings: 1

(3)创建表时,建立全文索引

mysql> create table t6 (->  id int(10) not null,-> name char(20) not null,->  info varchar (255), -> fulltext index t6(info));
Query OK, 0 rows affected (0.06 sec)

查看索引方法:

mysql>show index from t1\G; 
或
mysql>show keys from t2\G; 
或
mysql>show create table t3 \G

索引的删除有如下两种方法:

DROP INDEX 索引名 ON 表名;

ALTER TABLE 表名 DROP INDEX 索引名;

三、事务

1.事务的概述    

         MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,要删除一个人员,即需要删除人员的基本资料,又需要删除和该人员相关的信息,如信箱,文章等等。这样,这些数据库操作语句就构成一个事务。这是一种机制、一个操作序列,包含了一组数据库操作命令,并且把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么都执行,要么都不执行,事务用来管理insert,update,delete语句。

       是一个不可分割的工作逻辑单元,在数据库系统上执行并发操作时,事务是最小的控制单元适用于多用户同时操作的数据库系统的场景,如银行、保险公司及证券交易系统等等通过事务的整体性以保证数据的一致性

 2.事务ACID特性

(1)原子性(Atomicity)

  • 事务是一个完整的操作,事务的各元素是不可分的
  • 事务中的所有元素必须作为一个整体提交或回滚
  • 如果事务中的任何元素失败,则整个事务将失败

(2)一致性(Consistency)

  • 当事务完成时,数据必须处于一致状态
  • 在事务开始前,数据库中存储的数据处于一致状态
  • 在正在进行的事务中,数据可能处于不一致的状态
  • 当事务成功完成时,数据必须再次回到已知的一致状态

(3)隔离性(Isolation)

  • 对数据进行修改的所有并发事务是彼此隔离的,表明事务必须是独立的,它不应以任何方式依赖于或影响其他事务
  • 修改数据的事务可在另一个使用相同数据的事务开始之前访问这些数据,或者在另一个使用相同数据的事务结束之后访问这些数据

(4)持久性(Durability)

  • 指不管系统是否发生故障,事务处理的结果都是永久的
  • 一旦事务被提交,事务的效果会被永久地保留在数据库中

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/34898.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

搭建rtmp/rtsp流媒体服务器的步骤

很多文章介绍使用ffmpeg推送和拉流,执行推流命令: D:\software\ffmpeg-7.0.1-full_build\bin\ffmpeg.exe -re -stream_loop -1 -i "D:\Video\汪汪队立大功\S07\001.mp4" -vcodec h264 -acodec aac -f flv rtmp://127.0.0.1/live/test110 经常…

迅为iTOP-2K1000开发板龙芯中科国产64位Loognix主板

硬件配置 国产龙芯处理器,双核64位系统,板载2G DDR3内存,流畅运行Busybox、Buildroot、Loognix、QT5.12 系统! 接口全板载4路USB HOST、2路千兆以太网、2路UART、2路CAN总线、Mini PCIE、SATA固态盘接口、4G接口、GPS接口WIF1、蓝牙、Mini H…

获取个人免费版Ubuntu Pro

首先上官网地址:Ubuntu Pro | Ubuntu 点击页面中的"Get Ubuntu Pro now" 将用途选为“Myself”,在此页面中Ubuntu说明了该版本只面向个人开发者,且最终只允许5台设备免费使用;因而部署设备的抉择就不得不慎重考虑了&am…

基于springboot实现机动车号牌管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现机动车号牌管理系统演示 摘要 在如今社会上,关于信息上面的处理,没有任何一个企业或者个人会忽视,如何让信息急速传递,并且归档储存查询,采用之前的纸张记录模式已经不符合当前使用要求了。所以&am…

cmake add_definitions详解

在 CMake 中&#xff0c;add_definitions 函数用于向编译器添加预定义的宏定义。这些宏定义可以在编译源文件时使用&#xff0c;以便在代码中条件编译或设置特定的编译选项。 基本语法 add_definitions(-D<DEFINE>)D: 要定义的宏名称。在大多数编译器中&#xff0c;使用…

【nest】puppeteer 使用 addScriptTag 在页面中添加方法的方式

1.js方法支持&#xff08;已测试&#xff09; 1.1 先支持js tsconfig.json "compilerOptions": {"allowJs": true,...}1.2 需要将抽离的方法放在js中封装 src/utils/utils.js export function concatLabel(tagList) {let labels [];for (let i …

node+nginx实现对react进行一键打包部署--windows版

文章目录 nodenginx实现对react进行一键打包部署--windows版1.功能展示及项目准备1.1功能展示 1.2 项目准备1.2.1技术点1.2.2安装相关配置(windows) 2.实现2.1 实现思路2.2 实现步骤2.1 项目准备2.1.1 创建env文件2.1.2 创建api/index.js文件2.1.3 添加解决跨域代码 2.2 项目实…

Android Studio中HAXM安装失败的解决方案(HAXM installation failed)

文章目录 错误示例Hyper-VWindows SandboxWindows Hypervisor Platform&#xff08;Windows 虚拟化监控程序平台&#xff09; 出现原因解决方法虚拟机平台方案一方案二方案三 错误示例 表明HAXM (Hardware Accelerated Execution Manager)安装失败了。HAXM是一个硬件辅助虚拟化…

FPGA SATA高速存储设计

今天来讲一篇如何在fpga上实现sata ip&#xff0c;然后利用sata ip实现读写sata 盘的目的&#xff0c;如果需要再速度和容量上增加&#xff0c;那么仅仅需要增加sata ip个数就能够实现增加sata盘&#xff0c;如果仅仅实现data的读写整体来说sata ip设计比较简单&#xff0c;下面…

车载系统类 UI 风格品质非凡

车载系统类 UI 风格品质非凡

List的五种常用遍历方式

在Java中&#xff0c;遍历List的方式有多种&#xff0c;每种方式适合不同的使用场景。以下是常见的几种遍历List的方式&#xff0c;并举例说明 public static void main(String[] args) {List<String> names new ArrayList<>();names.add("Alice");name…

数据资产与云计算深度融合:借助云计算技术,优化数据存储、高效处理并创新应用,驱动企业数字化转型

目录 一、引言 二、数据资产与云计算深度融合的必要性 1、数据资产的重要性 2、云计算技术的优势 三、云计算技术在数据资产管理中的应用 1、数据存储的优化 2、数据处理的高效性 3、数据应用的创新 四、云计算驱动企业数字化转型的实践案例 案例一&#xff1a;金融行…

JS的this关键字详解

引言 学习JS的this关键字往往难以理解和应用&#xff0c;本文详细解读JS中的this关键字&#xff0c;并结合案例给出相应的解释。 PS: https://github.com/WeiXiao-Hyy/blog整理了后端开发的知识网络&#xff0c;欢迎Star&#xff01; JS中的this关键字 this提供了一种更优雅…

虚拟机与主机的网络桥接

虚拟机网路桥接是一种网络配置方式&#xff0c;它允许虚拟机与物理网络中的其他设备直接通信。在桥接模式下&#xff0c;虚拟机的网络接口通过主机的物理网卡连接到局域网中&#xff0c;就像主机本身一样&#xff0c;拥有自己的MAC地址和IP地址。这种方式使得虚拟机可以像独立的…

【SpringBoot Web框架实战教程(开源)】01 使用 pom 方式创建 SpringBoot 第一个项目

导读 这是一系列关于 SpringBoot Web框架实战 的教程&#xff0c;从项目的创建&#xff0c;到一个完整的 web 框架&#xff08;包括异常处理、拦截器、context 上下文等&#xff09;&#xff1b;从0开始&#xff0c;到一个可以直接运用在生产环境中的web框架。而且所有源码均开…

MySQL进阶-索引-使用规则-最左前缀法则和范围查询

文章目录 1、最左前缀法则2、启动mysql3、查询tb_user4、查看tb_user的索引5、执行计划 profession 软件工程 and age31 and status 06、执行计划 profession 软件工程 and age317、执行计划 profession 软件工程8、执行计划 age31 and status 09、执行计划 status 010、执行…

方法的其他形式——方法使用时常见的问题

示例&#xff1a; public class MethodDemo02 {public static void main(String[] args) {//目标&#xff1a;掌握按照方法的实际业务需求不同&#xff0c;设计出合理的方法形式来解决问题//需求&#xff1a;打印三行Hello World.printfHelloWorld();System.out.println("…

python 字符串内置函数

序号函数作用1len()返回字符串的长度2find()查找字符串中指定子字符串的第一个出现的位置3rfind()查找字符串中指定子字符串的最后一个出现的位置4index()查找字符串中指定子字符串的第一个出现的位置&#xff0c;如果不存在则报错&#xff0c;提示异常。5rindex()查找字符串中…

dma是什么意思?什么是dma?

DMA有两种主要的含义&#xff0c;以下是针对这两种含义的详细解释&#xff1a; 一、DMA&#xff08;Dynamic Mechanical Analysis&#xff09; 定义&#xff1a; DMA&#xff0c;全称Dynamic Mechanical Analysis&#xff0c;即动态热机械分析。这是一种用于测量黏弹性材料的…

k8s持久化之emptyDir使用

目录 概述实践代码 概述 理解emptyDir使用&#xff0c;是后续k8s持久化进阶&#xff0c;高阶使用的基础。 实践 代码 详细说明在代码中 # 缓存数据&#xff0c;可以让多个容器共享数据 # 删除 Pod 时&#xff0c;emptyDir 数据同步消失 # 定义 initContainer -> 下载数据…