目录

c面试题整理

目录

c#面试题整理

1.如何保持数据库的完整性,一致性

最好的方法:数据库约束(check,unique,主键,外键,默认,非空)

其次是:用触发器

最后:才是自己些业务逻辑,这个效率低

2.事务

有点类似于存储过程,也是把一大串的sql语句,整合在一起,然后通过commit 调用事务名。

他的优势在于,在于要么全部成功,如果失败的话,会回滚,不会出现一部分成功,一部分失败这种情况。很好地维护了数据库的完整性和一致性。事务有这么几个特性,原子性,一致性,隔离性,持久性

3.介绍一下数据库的锁

锁的类型有三种

共享锁 S Lock

排它锁 X Lock

更新锁  U Lock

X Lock(仅允许一个事务进行读写)

– 隐式加锁示例

BEGIN TRANSACTION;

– 对某一行加排他锁(X Lock)

UPDATE Employees

SET Salary = Salary + 1000

WHERE EmployeeID = 1;

– 提交事务,释放锁

COMMIT TRANSACTION;

执行 UPDATE 时,SQL Server 会自动对 EmployeeID = 1 的行加排他锁(X Lock),直到事务提交或回滚。

S Lock(允许多个事务一起读,但禁止写)

– 显式加共享锁(S Lock)

BEGIN TRANSACTION;

SELECT *

FROM Employees WITH (HOLDLOCK, ROWLOCK)

WHERE DepartmentID = 10;

– 提交事务,释放锁

COMMIT TRANSACTION;

  • HOLDLOCK :保持共享锁直到事务结束。
  • ROWLOCK :指定行级锁。

U Lock(初始为共享锁,更新时升级为排它锁)

– 设置锁超时为 5 秒

SET LOCK_TIMEOUT 5000;

BEGIN TRANSACTION;

– 尝试加锁,如果 5 秒内未获得锁,则抛出错误

SELECT *

FROM Employees WITH (UPDLOCK, ROWLOCK)

WHERE EmployeeID = 1;

COMMIT TRANSACTION;

  • UPDLOCK :加更新锁(U Lock),防止其他事务修改数据。

BEGIN TRANSACTION;

– 加更新锁(U Lock)

SELECT *

FROM Employees WITH (UPDLOCK)

WHERE EmployeeID = 1;

– 检查数据后决定更新

UPDATE Employees

SET Salary = Salary + 1000

WHERE EmployeeID = 1;

COMMIT TRANSACTION;

  • SELECT 语句中, WITH (UPDLOCK) 提示会对 EmployeeID = 1 的行加更新锁(U Lock)。
  • 此时,其他事务可以读取该行(加共享锁),但不能加更新锁或排他锁。
  • 当执行 UPDATE 语句时,更新锁会升级为排他锁(X Lock),其他事务将无法访问该行,直到当前事务完成。

4.介绍一下索引

索引,英文名index,功能就类似于书籍的索引,通过索引目录,可以更快地定位。

5.介绍一下视图和游标

视图是一种虚拟表,有时候为了方便查询,会将一张表或多张的表数据,作个临时的整合。视图的作用,就是把临时整合的结果放在视图里,这样查询这个整合结果的时候,直接查询视图名即可。理论上可以对视图进行增加,删除,修改,但是条件很苛刻,建议从原表进行增删改

游标,顾名思义游动的标记。比如有一张订单表,里面有订单总额这个字段,这时候要实现总额超过1000的,状态字段显示高,小于等于1000的显示低。游标起到的作用,就是遍历查询结果,加上对应的高低状态。

游标的缺点就是服务器开销大。

6.介绍一下存储过程

将一大串的sql语句,整合在一起。exec 调用存储过程名。有点,速度快,流量消耗少,加密性好,防止sql注入

7.触发器介绍一下

triger。对某张表执行某项操作的时候,如果该操作,有对应的触发操作,执行该操作后,就会执行触发器里定义的操作行为。

有点就是:减少了客户端的操作步骤,也算是起到了数据约束的作用