1、MySQL事务
数据库中的事务是指对数据库执行一批的操作,这些操作最重要么全部执行成功,要么全部失败,不会出现部分成功的情况。
事务的几个特性:
原子性:事务的整个过程如原子操作,要么最终全部成功,要么最终全部失败,这个原子性是从最终结果来看的,从最终结果来看的,整个过程是不可分割的。
一致性:一个事务必须使数据库从一个一致性状态变换到另一个一致性状态。从实际业务逻辑来说,最终结果是对的、和程序员所预期结果完全相符。
隔离性:一个事务的执行不能被其他事务所干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事物之间不能互相干扰。
持久性:一个事务一旦提交,他对数据库中数据的改变是永久性的。当事务提交之后,数据会持久化到硬盘,修改是永久性的。
2、MySQL索引
索引是靠某些数据结构和算法来组织数据,最终引导用户快速检索出所需要的数据。
索引有两个特点:
1、通过数据结构和算法来对原始数据进行一些有效的组织。
2、通过这些有效的组织,可以引导使用者对原始数据进行快速的检索。
索引的本质:通过不断地缩小想要获取数据的范围来筛选出最终想要的结果,同时把随机的事件变成顺序的事件,也就是说,有了这种索引机制,我们可以总是用一种查找方式来锁定数据。
3、视图
视图是数据库中一个表或者多个表导出的虚拟表,是一种虚拟存在的表,方便用户对数据的操作。
视图是一个虚拟表,是从数据库中一个或多个表中导出来的表,其内容由查询定义。同真实表一样,试图包含一系列带有名称的列和行数据。
但是,数据库中只存放了视图的定义,并没有存放视图中的数据。这些数据存放在原来的表中。使用视图查询数据时,数据库系统会从原来的表中取出对应的数据。
因此,视图中的数据是依赖于原来的表的数据。一旦表中的数据发生改变,显示在视图中的数据也会发生改变。
4、Drop、Truncate、Delete的区别
Drop(删除表):删除内容和定义,释放空间,简单来说就是把整个表去掉,以后要新增数据是不可能的,除非新建一个表。
Drop语句将删除表的结构被依赖的约束,触发器,索引,依赖于该表的存储过程/函数将被保留,但其状态会变成:Invalid。如果要删除表定义及其数据,则使用DROP TABLE语句。
Turncate(清空表中的数据):删除内容、释放空间但不能删除定义(保留表的数据结构),与Drop不同的是,只是清空表数据而已。
Turncate不能删除具体的行数据,要删就把整个表清空了。
Delete(删除表中的数据):delete语句用于删除表中的行。delete语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务,记录在日志中保存,以便进行回滚操作。
Turncate与不带where的Delete:
Delete只删除数据不删除表的结构(定义)
Turncate删除表中的所有行,但是表结构机器列、约束、索引等保持不变。
对于外键约束应用的表,不能使用Turncate,而应该使用不带where子句的Delete语句。
由于Turncate记录在日志中,所以他不能激活触发器。Delete语句是数据库操作语言,这个操作会放到rollback segement(它是数据库中的一部分存储空间,用来临时保存当数据库数据发生改变时的先前值)中,事务提交之后才生效。如果有相应的trigger,执行时将被触发。