C++⾯试题汇总数据库
C++⾯试题汇总数据库
数据库基础
数据库索引
1. 数据库索引是对数据库表中⼀列或多列的值进⾏排序的⼀种结构, 是为了增加查询速度⽽对表字段附加的⼀种标识。
2. DB在执⾏⼀条Sql语句的时候,默认的⽅式是根据搜索条件进⾏全表扫描,遇到匹配条件的就加⼊搜索结果集合。
3. 如果我们对某⼀字段增加索引,查询时就会先去索引列表中⼀次定位到特定值的⾏数,⼤⼤减少遍历匹配的⾏数,所以能明显增加查
询的速度。
数据库事务
数据库事务(Database Transaction),是指对单个逻辑⼯作单元执⾏的⼀系列操作,要么完全地执⾏,要么完全地不执⾏。
事务处理可以确保除⾮事务性单元内的所有操作都成功完成,否则不会永久更新⾯向数据的资源。
(操作) 通过将⼀组相关操作组合为⼀个要么全部成功要么全部失败的单元,可以简化错误恢复并使应⽤程序更加可靠。
(事务) ⼀个逻辑⼯作单元要成为事务,必须满⾜所谓的 ACID(原⼦性(Atomicity)、⼀致性(Consistency)、隔离性(Isolation)、持久性(Durability))属性。事务是数据库运⾏中的逻辑⼯作单位,由DBMS中的事务管理⼦系统负责事务的处理。
数据库事务隔离
隔离性(Isolation)
隔离性是当多个⽤户并发访问数据库时,⽐如操作同⼀张表时,数据库为每⼀个⽤户开启的事务,不能被其他事务的操作所⼲扰,多个并发事务之间要相互隔离。
即要达到这么⼀种效果:对于任意两个并发的事务T1和T2,在事务T1看来,
T2要么在T1开始之前就已经结束,
要么在T1结束之后才开始,
这样每个事务都感觉不到有其他事务在并发地执⾏。
多个并发事务相互隔离,即⼀个事务不应该影响其它事务运⾏效果。
这指的是在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各⾃的完整数据空间。
由并发事务所做的修改必须与任何其他并发事务所做的修改隔离。
不同的隔离级别:
Read Uncommitted(读取未提交内容):最低的隔离级别,什么都不需要做,⼀个事务可以读到另⼀个事务未提交的结果。所有
的并发事务问题都会发⽣。
Read Committed(读取提交内容):只有在事务提交后,其更新结果才会被其他事务看见。可以解决脏读问题。
Repeated Read(可重复读):在⼀个事务中,对于同⼀份数据的读取结果总是相同的,⽆论是否有其他事务对这份数据进⾏操
作,以及这个事务是否提交。可以解决脏读、不可重复读。
Serialization(可串⾏化):事务串⾏化执⾏,隔离级别最⾼,牺牲了系统的并发性。可以解决并发事务的所有问题。inner join, left join, right join,full join
inner join(内连接): 只返回两个表中联结字段相等的⾏
left join(左联接): 返回包括左表中的所有记录和右表中联结字段相等的记录
right join(右联接): 返回包括右表中的所有记录和左表中联结字段相等的记录
full join(外连接): 返回两个表中的⾏
数据库事务的⼀致性
事务(Transaction)是由 ⼀系列对系统中数据进⾏访问与更新的操作 所组成的⼀个程序执⾏逻辑单元。
事务是DBMS中最基础的单位,它不可分割。
事务具有4个基本特征(ACID),分别是:原⼦性(Atomicity)、⼀致性(Consistency)、隔离性(Isolation)、持久性(Duration),简称ACID。
原⼦性(Atomicity)
原⼦性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应⽤到数据库,如果操作失败则不能对数据库有任何影响。
⼀致性(Consistency)
⼀致性是指事务必须使数据库从⼀个⼀致性状态变换到另⼀个⼀致性状态,也就是说⼀个事务执⾏之前和执⾏之后都必须处于⼀致性状态。
拿转账来说,假设⽤户A和⽤户B两者的钱加起来⼀共是5000,那么不管A和B之间如何转账,转⼏次账,事务结束后两个⽤户的钱相加起来应该还得是5000,这就是事务的⼀致性。
隔离性(Isolation)
隔离性是当多个⽤户并发访问数据库时,⽐如操作同⼀张表时,数据库为每⼀个⽤户开启的事务,不能被其他事务的操作所⼲扰,多个并发事务之间要相互隔离。
asynchronous query execution
即要达到这么⼀种效果:对于任意两个并发的事务T1和T2,在事务T1看来,
T2要么在T1开始之前就已经结束,
要么在T1结束之后才开始,
这样每个事务都感觉不到有其他事务在并发地执⾏。
多个并发事务相互隔离,这指的是
在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各⾃的完整数据空间。
由并发事务所做的修改必须与任何其他并发事务所做的修改隔离。
不同的隔离级别:
Read Uncommitted(读取未提交内容):最低的隔离级别,什么都不需要做,⼀个事务可以读到另⼀个事务未提交的结果。所有
的并发事务问题都会发⽣。
Read Committed(读取提交内容):只有在事务提交后,其更新结果才会被其他事务看见。可以解决脏读问题。
Repeated Read(可重复读):在⼀个事务中,对于同⼀份数据的读取结果总是相同的,⽆论是否有其他事务对这份数据进⾏操
源码资本有哪些福利作,以及这个事务是否提交。可以解决脏读、不可重复读。
Serialization(可串⾏化):事务串⾏化执⾏,隔离级别最⾼,牺牲了系统的并发性。可以解决并发事务的所有问题。
持久性(Durability)
持久性是指⼀个事务⼀旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。
例如我们在使⽤JDBC操作数据库时,在提交事务⽅法后,提⽰⽤户事务操作完成,当我们程序执⾏完成直到看到提⽰后,就可以认定事务以及正确提交,即使这时候数据库出现了问题,也必须要将我们的事务完全执⾏完成,否则就会造成我们看到提⽰事务处理完毕,但是数据库因为故障⽽没有执⾏事务的重⼤错误。
索引是什么,多加索引⼀定会好吗
索引
数据库索引是对数据库表中⼀列或多列的值进⾏排序的⼀种结构, 是为了增加查询速度⽽对表字段附加的⼀种标识。
DB在执⾏⼀条Sql语句的时候,默认的⽅式是根据搜索条件进⾏全表扫描,遇到匹配条件的就加⼊搜索结果集合。
如果我们对某⼀字段增加索引,查询时就会先去索引列表中⼀次定位到特定值的⾏数,⼤⼤减少遍历匹配的⾏数,所以能明显增加查询的速度。
优点:唯⼀性, 加快数据检索速度, 加速表的连接, 加速分组和排序, 使⽤优化隐藏器
通过创建唯⼀性索引,可以保证数据库表中每⼀⾏数据的唯⼀性。
可以⼤⼤加快数据的检索速度,这也是创建索引的最主要的原因。
可以加速表和表之间的连接,特别是在实现数据的参考完整性⽅⾯特别有意义。
在使⽤分组和排序⼦句进⾏数据检索时,同样可以显著减少查询中分组和排序的时间。
通过使⽤索引,可以在查询的过程中,使⽤优化隐藏器,提⾼系统的性能。
缺点:创建和维护, 降低维护速度, 占物理空间
创建索引和维护索引要耗费时间,这种时间随着数据量的增加⽽增加。
当对表中的数据进⾏增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。
索引需要占物理空间,除了数据表占数据空间之外,每⼀个索引还要占⼀定的物理空间,如果要建⽴聚簇索引,那么需要的空间就会更⼤。
添加索引原则: N少⽤, N少值, N特定类型, 性能需求
在查询中很少使⽤或者参考的列不应该创建索引。
这是因为,既然这些列很少使⽤到,因此有索引或者⽆索引,并不能提⾼查询速度。
相反,由于增加了索引,反⽽降低了系统的维护速度和增⼤了空间需求。
只有很少数据值的列也不应该增加索引。
这是因为,由于这些列的取值很少,例如⼈事表的性别列,在查询的结果中,结果集的数据⾏占了表中数据⾏的很⼤⽐例,即需要在表中搜索的数据⾏的⽐例很⼤。
增加索引,并不能明显加快检索速度。
定义为 text、image和bit数据类型 的列不应该增加索引。这是因为,这些列的数据量要么相当⼤,要么取值很少。
当修改性能远远⼤于检索性能时,不应该创建索引。
这是因为,修改性能和检索性能是互相⽭盾的。
当增加索引时,会提⾼检索性能,但是会降低修改性能。
当减少索引时,会提⾼修改性能,降低检索性能。
因此,当修改性能远远⼤于检索性能时,不应该创建索引。
数据库的三⼤范式
数据库的设计范式是数据库设计所需要满⾜的规范,满⾜这些规范的数据库是简洁的、结构明晰的,同时,不会发⽣插⼊(insert)、删除(delete)和更新(update)操作异常。
第⼀范式:当关系模式R的所有属性都不可再分为更基本的数据单位时,称R是满⾜第⼀范式,即属性不可分
第⼆范式:如果关系模式R满⾜第⼀范式,并且R的所有⾮主属性都完全依赖于R的每⼀个候选关键属性,称R满⾜第⼆范式第三范式:如果关系模式R满⾜第⼀范式, 且R中的任意属性集, 都⾮传递依赖于R的任意⼀个候选关键属性,称R满⾜第三范式,即⾮主属性不传递依赖于键码
参考:
第⼀范式(1NF):列不可再分
每⼀列属性都是不可再分的属性值,确保每⼀列的原⼦性
两列的属性相近或相似或⼀样,尽量合并属性⼀样的列,确保不产⽣冗余数据
第⼆范式(2NF): 属性完全依赖于主键
第⼆范式(2NF)是在第⼀范式(1NF)的基础上建⽴起来的,即满⾜第⼆范式(2NF)必须先满⾜第⼀范式(1NF)。
第⼆范式(2NF)要求数据库表中的每个实例或⾏必须可以被惟⼀地区分。为实现区分通常需要为表加上⼀个列,以存储各个实例的惟⼀标识。这个惟⼀属性列被称为主键
第三范式(3NF): 属性不依赖于其它⾮主属性, 属性直接依赖于主键
数据不能存在传递关系,即每个属性都跟主键有直接关系⽽不是间接关系。
数据库的ACID特性
事务(Transaction)是由 ⼀系列对系统中数据进⾏访问与更新的操作 所组成的⼀个程序执⾏逻辑单元。mysql面试题sql优化
事务是DBMS中最基础的单位,它不可分割。
事务具有4个基本特征(ACID),分别是:原⼦性(Atomicity)、⼀致性(Consistency)、隔离性(Isolation)、持久性(Duration),简称ACID。
原⼦性(Atomicity)
原⼦性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应⽤到数据库,如果操作失败则不能对数据库有任何影响。
⼀致性(Consistency)
⼀致性是指事务必须使数据库从⼀个⼀致性状态变换到另⼀个⼀致性状态,也就是说⼀个事务执⾏之前和执⾏之后都必须处于⼀致性状态。
拿转账来说,假设⽤户A和⽤户B两者的钱加起来⼀共是5000,那么不管A和B之间如何转账,转⼏次账,事务结束后两个⽤户的钱相加起来应该还得是5000,这就是事务的⼀致性。
隔离性(Isolation)
隔离性是当多个⽤户并发访问数据库时,⽐如操作同⼀张表时,数据库为每⼀个⽤户开启的事务,不能被其他事务的操作所⼲扰,多个并发事务之间要相互隔离。
即要达到这么⼀种效果:对于任意两个并发的事务T1和T2,在事务T1看来,
T2要么在T1开始之前就已经结束,
要么在T1结束之后才开始,
这样每个事务都感觉不到有其他事务在并发地执⾏。
pascal wanama多个并发事务相互隔离,这指的是
在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各⾃的完整数据空间。
由并发事务所做的修改必须与任何其他并发事务所做的修改隔离。
不同的隔离级别:
Read Uncommitted(读取未提交内容):最低的隔离级别,什么都不需要做,⼀个事务可以读到另⼀个事务未提交的结果。所有的并发事务问题都会发⽣。
Read Committed(读取提交内容):只有在事务提交后,其更新结果才会被其他事务看见。可以解决脏读问题。
web前端html和css知识点总结
Repeated Read(可重复读):在⼀个事务中,对于同⼀份数据的读取结果总是相同的,⽆论是否有其他事务对这份数据进⾏操
作,以及这个事务是否提交。可以解决脏读、不可重复读。
register造句
Serialization(可串⾏化):事务串⾏化执⾏,隔离级别最⾼,牺牲了系统的并发性。可以解决并发事务的所有问题。
持久性(Durability)
持久性是指⼀个事务⼀旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。
例如我们在使⽤JDBC操作数据库时,在提交事务⽅法后,提⽰⽤户事务操作完成,当我们程序执⾏完成直到看到提⽰后,就可以认定事务以及正确提交,即使这时候数据库出现了问题,也必须要将我们的事务完全执⾏完成,否则就会造成我们看到提⽰事务处理完毕,但是数据库因为故障⽽没有执⾏事务的重⼤错误。
SQL
MySQL主要包含四种隔离状态:
事务隔离级别脏读不可重复读幻读读未提交(read-uncommitted)是是是
不可重复读(read-committed)否是是

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。