1题:
数据库事务是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成(即:sql语句字符串数组)
一个数据库事务通常包括一个序列的对数据库的 读/写 操作,
事务存在的目的是:
1为数据库操作提供一个从失败中恢复到正常状态的方法,同时提供了数据库即使在异常状态下仍能保持一致性的方法
(即当sql语句序列中有一条语句错误时,执行回滚)
2当多个应用程序存在并发访问数据库时,可以在这些应用程序之间提供一个隔离方法,以防彼此的操作互相干扰
注意:并非任意的对数据库的操作序列都是数据库事务(还有存储过程也可以),数据库事务拥有以下四个特性,习惯性上被称之为AC ID特性.那么什么是ACID特性呢?如下:
原子性:事务作为一个整体被执行,包含在其中的sql语句要么被全部执行,要么都不执行
一致性:事务应确保数据库从一个一致状态到另一个一致状态.一致状态的含义是数据库中的数据应该满足完整性约束
隔离性: 多个事务并发执行时,一个事务的执行不应该影响其他事务的执行.
持久性: 已被提交的事务对数据库的修改应该永久的保存在数据库中.
锁:
当并发事务同时访问一个资源时,有可能导致数据的不一致性,因此需要一种机制来将数据访问顺序化,
以保证数据库数据的一致性,锁就是其中一种机制.
1.共享锁
共享锁(S锁)允许并发事务在封闭式并发下读取(select) 资源.资源上存在共享锁(S锁)时,任何其他事务都不可以修改数据.读取操作一旦完成,就立即释放资源上的共享锁(S锁),除非将事务隔离级别设置为可重复性或更高级别,或者在事务持续时间内用锁定提示保留共享锁.
2.更新锁:(U锁)
更新锁是共享锁的和其他排他锁的集合,更新锁意味着在做一个更新(update)时,一个龚翔锁在扫描完成符合条件的数据后可能会转化为排他锁
3.排他锁:
排他锁:(x锁)可以防止事务对资源进行访问.排他锁不与其他任何锁兼容.使用排他锁(x锁)时,任何其他的事务都无法修改数据;仅在使用NOLOCK提示或未提交读隔离级别时才会进行读取操作.
4.悲观锁
悲观锁是指假设并发更新时冲突发生,所以不管冲突是否真的发生,都会使用锁机制.
悲观锁会完成以下功能:锁住读取的记录,防止其他事务读取和更新这些记录.其他事务会一直阻塞.直到这个事务完成.
悲观锁可以使用Repeatable Read 事务 ,它完全满足悲观锁的要求.
5.乐观锁
乐观锁不会锁住任何东西,也就是说,它不依赖数据库事务机制,乐观锁完全是应用系统层面的东西.
如果使用乐观锁,那么数据库就必须加版本字段,否者只能比较所有字段,但是因为浮点型不能比较,所以实际上没有版本字段是不行的.
2题
sql中的索引
可以把索引当成理解成一种特殊的目录,Sql server 提供了 三种索引 :聚集索引和非聚集索引还有唯一索引
其实新华字典就是的正文本身就是一个索引.比如我们查安字,就会自然的翻开字典正文的前几页,因为字典正文是按照a~z的顺序排列的那么安字就在字典的前几页,翻完所有a开头的仍然没有找到,那就说明字典没有收录这个字,我们把这种正文本生就是一种按照一定规则排列的目录称之为"聚合索引"
那么什么是非聚合排序呢?
就是当在新华字典遇到不认识的字的时候,不知道它的发音吗,这个时候就要按照偏旁部首来查找到这个字的页码
比如我们在查找张字的时候张的页码是672页,而张字上面的是"驰" 字,但是页码却是390页,
很显然"驰"字并非在张的前面一个字,在检字表看见的字是它们在飞聚合索引中的排序,是字典正文中的字在非聚合索引中的映射
唯一索引:
主键与唯一索引的区别
主键是一种约束,唯一索引是一种索引,两者在本质上是不同的。 主键创建后一定包含一个唯一性索引,唯一性索引并不一定就是主键。 唯一性索引列允许空值,而主键列不允许为空值。 主键列在创建时,已经默认为空值 + 唯一索引了。
主键可以被其他表引用为外键,而唯一索引不能。 一个表最多只能创建一个主键,但可以创建多个唯一索引。 主键更适合那些不容易更改的唯一标识,如自动递增列、身份证号等。 在 RBO 模式下,主键的执行计划优先级要高于唯一索引。 两者可以提高查询的速度。
3题:
三层分为:
数据访问层:DAL ,业务逻辑层:BLL ,表示层:UI
表示层:实现内容的展示和用户的交互;
业务逻辑层:实现业务逻辑和验证
数据访问层:连接数据库并对数据库中数据进行操作
4题:
冒泡排序:
要点 :
1数组中第一个数,和后面相邻的元素比较 ,如果后面的元素比自己大就交换值,(此处可以决定将大数往左还是右排)
2第一次拍完后最大的数一定在最左或者最右边,
m
打开vs太麻烦这里用js写一下
第二种:
第二页:
一题:
select tb1.SNo, tb1.SName , tb2.CName from S tb1 left join SC tb3 on tb1.SNo =tb3.SNo
left join C tb2 on tb2.CNo =tb3.CNo where tb2.CName='税收基础'
为了更使结果更明显我加了课程名称在结果中
二题:
为了使结果更明显这里加了CNo
select tb1.SName,tb1.SD,tb3.CNo from s as tb1 left join sc tb3 on tb1.SNo =tb3.SNo where tb3.CNo ='C2'
三题:题中有不等于 所以看一下: sql server 的 不等于 是 <>
答案:
select S.SName,S.SD ,sc.CNo from S left join SC on s.SNo = sc.SNo where CNo <> 'C5'
为了显示更好显示,添加了 CNo 结果如下: