首页 > 技术文章 > 数据库常用性知识总结

caicai920 2021-08-16 16:47 原文

数据库常用性知识总结

什么是数据库事务?

数据库事务,是独立执行,并且可并发调用,并且事务具有唯一性,一致性。

基本性质

  • 原子性:要么执行,要么不执行
  • 一致性:只有合法数据才可以被写入
  • 隔离性:每一个事务都是独立的,可以并发去执行某一个事务
  • 持久性: 事务结束之后,处理解决必须固化,一旦事务被提交,对数据库的改变是永久的。redis不支持,事务回滚

事务语句:

1、开始事务 begin transaction

2、提交事务 commit transaction

3、回滚事务 rollbask transaction

数据库锁机制

数据库并发大的话,就要考虑锁和锁的性能问题,如果不控制的话,则会产生死锁。

锁机制就是在保证一个事务在没释放锁之前,其它事务是不能提交更改的。

锁类型

  • 悲观锁 :假设一个事务操作之前,防止数据冲突,会上锁,不让其它事务回修改数据并访问这个某个数据。悲观锁会增加数据库的开销,会增加死锁的发生,还会降低并行,一旦数据锁定,后面的人必须排队。
//0.开始事务
begin; 
//1.查询出商品库存信息
select quantity from items where id=1 for update ;
//2.修改商品库存为2
update items set quantity=2 where id = 1;
//3.提交事务 一般情况事务是自动提交的,如果有问题会自动回滚事务
commit;

以上,在对id = 1的记录修改前,先通过for update的方式进行加锁,然后再进行修改。这就是比较典型的悲观锁策略

  • 乐观锁 :在悲观锁的基础上,认为数据一般不会冲突,只有在数据提交更新的时候,才会去校验数据是否冲突,如冲突了,会返回错误信息给用户,让用户子判断怎么处理,它就不管了。

  • 共享锁 :简单来说就是共享,你能访问到它的资源,我也能访问

  • 排它锁 : 如果我已经加锁了,别人就不能加了

Mysql两中引擎的区别

Innodb引擎:提供了对数据库ACID事务的支持,并且实现了sql标准的四种隔离级别,事务安全的,支持行级锁,不支持全文索引。
MyIASM引擎:mysql的默认引擎,没有提供对数据库事务的支持,非事务安全的,锁的粒度是表级的,支持全文索引类型,相对简单性能优。

总结:
MYIASM管理非事务表,提供高速存储和检索,以及全文搜索能力,如果在应用中执行大量的select操作,应选择MYIASM引擎
Innodb用于事务处理,具有ACID事务支持等特性,如果在应用中执行大量的insert和update操作,应选择innodb引擎。

触发器的作用?
触发器是一中特殊的存储过程,主要是通过事件来触发而被执行的。它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可以联级运算。如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。

索引类型有哪些?
逻辑上:
Single column 单行索引
Concatenated 多行索引
Unique 唯一索引
NonUnique 非唯一索引
Function-based 函数索引
Partitioned 分区索引
NonPartitioned 非分区索引
B-tree :
Normal 正常型B树
Rever Key 反转型B树 Bitmap 位图索引

union和union all有什么不同?
UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。实际大部分应用中是不会产生重复的记录,最常见的是过程表与历史表UNION。 UNION ALL只是简单的将两个结果合并后就返回。这样,如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了。 从效率上说,UNION ALL 要比UNION快很多,所以,如果可以确认合并的两个结果集中不包含重复的数据的话,那么就使用UNION ALL。

推荐阅读