mysql索引,事务,锁

本文深入探讨了数据库中的索引概念,包括其作用、类型和优缺点,以及如何创建、查看和删除索引。同时,详细阐述了事务的基本原理、特性,以及事务的隔离级别。此外,还介绍了锁的类型和粒度,分析了锁在并发控制中的应用。最后,讨论了在何时应该使用索引以及避免索引的一些策略。
摘要由CSDN通过智能技术生成

索引

什么是索引

索引就是用来优化查询,加快查询速度。

为什么需要索引

索引是优化查询的最有效手段

索引的优劣

优势:优化查询加快检索速度;根据索引分组和排序可以加快分组和排序;
劣势:索引本身也是表,在一定程度上会占用存储空间;

创建索引

CREATE TABLE mytable( 
    ID INT NOT NULL, 
    username VARCHAR(16) NOT NULL, 
    INDEX myindex (username(16)) 
);

关键字:index 索引;myindex 索引名字;(username(16)) 索引要加在的列

创建索引2

create index myindex on mytable(username(16));

查看索引

SHOW INDEX FROM mytable;

删除索引

DROP INDEX myindex ON mytable; 

案例练习

-- 创建索引语法
CREATE TABLE mytable( 
  ID INT NOT NULL, 
  username VARCHAR(16) NOT NULL, 
  INDEX myindex (username(16)) 
);
-- index 索引  myindex 索引名字  (username(16))字段名字和长度
-- 查看索引
show index FROM mytable;
-- 删除索引
drop index myindex on mytable;
-- 添加索引2
create index myindex on mytable(username(16));

索引的使用规则

索引的分类

1、主键索引:根据主键建立索引,不允许重复,不允许空值;
2、唯一索引:建立索引的那一列的值必须是唯一的,允许空值;
3、普通索引:加在普通列上的索引,没有任何限制;

适合加索引

1、主键自动建立唯一索引;
2、经常出现在where和order by后的要加索引
3、作为排序的列适合加索引

不适合加索引

1、经常增删改的列不要加
2、大量重复的列不要加
3、数据太少的不要加

事务

什么是事务

事务是一个不可再分的工作单位,事务保障了数据的一致性要么都成功要么都失败。

事务的使用

开启事务

start transaction;

提交事务

commit;

发生异常,回滚事务

rollback;

案例

-- 事务
create table t_act(
	actno int PRIMARY key,
	balance int
);
-- 提交事务
start TRANSACTION;-- 开启事务
insert into t_act value(3,900);-- 添加数据
commit;-- 提交事务

select * from t_act;

-- 回滚事务
start TRANSACTION;-- 开启事务
update t_act set balance=balance-100 where actno=3;-- 修改数据
ROLLBACK;-- 回滚事务

事务的特征

原子性:事务是最小的单位,不可再分;

一致性:事务要求所有的DML语句操作的时候必须保证同时成功或者同事失败;

隔离性:同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰;

持久性:是事务的保证,事务终结的标志(内存的数据持久到硬盘文件中)。

事务的隔离级别

读未提交:事务A和事务B,A读到了B没有提交的数据

读已提交:a和b a提交了b才能读取到 默认级别

不可重复读:前后读取不一致

可重复读:幻读 插入了一条数据 读出来符合条件的的数据前后多

可串行化:串串一样排队

总结

隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大

什么是锁

锁是计算机协调多个进程或线程并发访问某一资源的机制

乐观锁

自己去实现的,认为这次操作不会导致冲突,在操作数据时,并不进行任何其他的特殊处理(也就是不加锁),而在进行更新后,
再去判断是否有冲突了

悲观锁

悲观锁就是在操作数据时,认为此操作会出现数据冲突,所以在进行每次 操作时都要通过获取锁才能进行对相同数据的操作

共享锁

也称为读锁,允许事务读取一行数据

排它锁

也称写锁,允许事务删除或更新一行数据

锁的粒度

锁的粒度就是你要锁定的范围是多大。使用锁时,锁定的东西越少,对其他竞争者影响越小,这个东西的大 小就是锁粒度

表级锁

开销小,加锁快,不会出现死锁。锁定粒度最大,适合查询为主的,只有少量按索引条件更新 数据的操作。缺点是资源争用概率高

行级锁

开销大,加锁慢,会出现死锁。锁定粒度最小,适合大量按索引条件并发更新少量不同数据, 同时又有并发查询的操作。

页面锁

开销介于表锁与行锁之间,会出现死锁

注意事项

共享锁之间是兼容的,而排它锁与其他任意锁都不兼容。因此我们在数据库中可以并行读,但只 能串行写,只有这样才不会发生线程竞争

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值