SQL索引与事务

数据库系统自动创建索引的情形
(1) 主键 primary key
(2) 唯一键 unique
(3) 外键列 foreign key

索引分类
---------基于一种B树数据结构创建索引
普通索引 允许在定义索引的列中插入重复值和空值

唯一索引 索引列的值不能重复
–主键索引

组合索引 基于多个列创建一个索引

索引SQL
(1)查看表中的所有的索引信息
show index from 表

(2) 创建索引
语法: create index 索引名称 on 表名(列名)

创建普通索引
create index 索引名称 on 表名(列名)

创建唯一索引
create unique index 索引名 on 表名(列名)

(3) 删除索引
语法: drop index 索引名 on 表名

索引失效的情形
1.数据类型不一致
2. 使用or进行多条件查询[如果有一个列没有索引,则其他索引列也失效]’
3.模糊查询%在前面
4.查询条件的索引列使用函数

事务

事务是数据库管理系统中用来确保一组数据库操作能够被视为一个逻辑单元执行的机制。事务具有以下特性:

  • 原子性(Atomicity):事务中的操作要么全部执行成功,要么全部回滚,不会出现部分执行的情况。
  • 一致性(Consistency):事务的执行使数据库从一个有效状态转换到另一个有效状态,即满足数据库的约束条件。
  • 隔离性(Isolation):事务的执行相互隔离,使它们彼此不受影响,每个事务都认为自己是唯一在对数据库进行操作的进程。
  • 持久性(Durability):一旦事务提交,其结果应该是可持久化的,即使在系统故障的情况下,也应该能够恢复。

开启事务
SET AUTOCOMMIT=0;
或 BEGIN;
或 START TRANSACTION;

end;-- 结束事务
commit;-- 提交
rollback;-- 回滚
mysql数据库默认自动提交方式为开启
SET AUTOCOMMIT=1;

事务的隔离级别共有4种
(1) 读未提交 read uncommitted – 存在"脏读"问题 [最低]

(2) 读已提交 read committed – 存在"不可重复读"问题 (oracle默认级别,SqlServer)

(3) 可重复读 repeatable read – 存在"幻读"问题 — (mysql默认级别,)

(4) 串行读 serializable – 不存在问题 [最高]

查看当前数据库的会话使用的事务隔离级别
show variables like ‘transaction_isolation’;

select @@transaction_isolation;

设置本次会话的事务隔离级别
该设置不会影响其他会话,并且设置会随着当前会话的结束而结束。
set session transaction isolation level 级别名

1.读未提交
AB事务开启, A修改未提交, B也能看到, 即脏读
2.读已提交
A修改后提交, B两次读取数据不一样, 提交前后不一样, 不可重复读
3.可重复读
A修改后提交, B两次读取数据一样, 但通过特殊语句可以读取A修改提交的信息, 如select * from 表名 for update, 即幻读
4 串行读 serializable
不具备实用性,事务与事务之前必须排序执行处理,并行度降低,性能下降

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值