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。对某张表执行某项操作的时候,如果该操作,有对应的触发操作,执行该操作后,就会执行触发器里定义的操作行为。

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

相关推荐
GanGuaGua1 小时前
MySQL:表的约束
数据库·mysql
Li zlun2 小时前
MySQL 性能监控与安全管理完全指南
数据库·mysql·安全
养生技术人3 小时前
Oracle OCP认证考试题目详解082系列第48题
运维·数据库·sql·oracle·database·开闭原则·ocp
海阳宜家电脑3 小时前
Lazarus使用TSQLQuery更新的一点技巧
数据库·lazarus·tsqlquery
一條狗4 小时前
学习日报 20251007|深度解析:基于 Guava LoadingCache 的优惠券模板缓存设计与实现
java·oracle·loadingcache
丨我是张先生丨4 小时前
SQLSERVER 查找存储过程中某个变量
数据库
感谢地心引力5 小时前
【Python】基于 PyQt6 和 Conda 的 PyInstaller 打包工具
数据库·python·conda·pyqt·pyinstaller
lypzcgf6 小时前
Coze源码分析-资源库-编辑数据库-后端源码-数据存储层
数据库·coze·coze源码分析·智能体平台·ai应用平台
jackaroo20206 小时前
后端_Redis 分布式锁实现指南
数据库·redis·分布式
liuy96156 小时前
迷你论坛项目
数据库