事务的四大特性(ACID)
原子性
原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚。
一致性
一致性是指事务必须是数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。
拿转账来说,假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱加起来应该还是5000,这是事物的一致性。
隔离性
隔离性是当多个用户并发访问数据库时,比如操作同一张表时
持久性
持久性是指一个事务一旦被提交了,那么数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。
数据库的隔离级别,每个级别会引发什么问题,MySQL默认是哪个级别?
读取未提交内容
在该隔离级别,所有事物都可以看到其他未提交事物的执行结果。本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少。读取未提交数据,也被称为脏读。
读取提交内容
这是大多数数据库的默认隔离级别(但不是MySQL默认的)。它满足了隔离的简单定义:一个事务只能看见已经提交事务所做的改变。这种隔离级别也支持所谓的不可重复读,因为同一事物的其他实例在该实例处理期间可能会有新的commit,所以同一select可能返回不同结果。
可重复读
这是MySQL默认事务隔离级别,它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行。不过理论上,这会导致另一个棘手的问题:幻读,简单地说,幻读指当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的“幻影”行。
可串行化
这是最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简而言之,它是在每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争。
- MyISAM和InnoDB两种存储引擎的区别(事务、锁级别等),各自适用的场景。
基本的差别为:MyISAM类型不支持事务、外键等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行速度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持以及外部键等高级数据库功能。
所以从宏观上来讲,事务数据库关注细节,而数据仓库关注高层次的聚集,所以,InnoDB更适合作为线上的事务型仓库,而MyISAM更适合作为ROLAP型数据仓库。
数据库第一、第二、第三范式
- 第一范式就是属性不可分割
- 第二范式就是要有主键,其他字段都依赖主键
- 第三范式就是没有传递依赖
什么是索引?
索引就是一种特殊的查询表,数据库的搜索引擎可以利用它加速对数据的检索。它很类似生活中书的目录,不需要查询整本书的内容就可以找到想要找的数据。
触发器的作用
触发器是一种特殊的存储过程,主要通过实践的触发来执行。
什么是存储过程?用什么来调用?
存储过程是一个预编译的SQL语句,有点事允许模块化设计,就是说只需要创建一次,以后再程序中可以多次调用。
什么是事务?什么是锁?
事务就是被绑定在一起作为一个逻辑工作单元的SQL语句分组,如果任何一个语句操作失败,那么整个操作就失败,以后操作就会回滚到操作前的状态或者是上一个节点。
锁:在所有的DBMS中,锁是事务的关键,锁可以保证事务的完整性和并发性。与现实生活中的锁一样,它可以是某些数据的拥有者,在某段时间内不能使用某些数据或数据结构。什么叫视图?游标是什么?
视图是一种虚拟的表,具有和物理表相同的功能。它可以对视图进行增、改、查操作。视图通常是有一个表或者多个表的行或列的子集。对视图的修改不影响基本表。它使得我们获取数据更容易,相比多表查询。
游标是对查询出来的结果集作为一个单元来有效的处理。游标可以定义在该单元中的特定行,从结果集的当前行中检索出一行或者多行。可以对结果集当前行进行修改。一般不适用游标,但是需要逐条处理数据的时候,游标显得十分重要。什么是主键?什么是外键?
主键是表格里的(一个或多个)字段,只用来定义表格里的行;主键里的值总是唯一的。外键是一个用来简历两个表格之间关系的约束。这种关系一般都涉及一个表格里的主键字段与另外一个表格里的一系列相连的字段。那么这些相连的字段就是外键。