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

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

相关推荐
这个DBA有点耶5 小时前
NULL不是空——数据库里最反直觉的设计,90%新人踩过的坑
数据库·mysql·代码规范
这个DBA有点耶6 小时前
AI写的SQL跑崩了生产库,这锅谁背?
数据库·人工智能·程序员
镜舟科技7 小时前
Databricks 再提 LTAP,AI 时代的数据底座为何重回大一统叙事?
数据库·架构·agent
Databend8 小时前
从湖仓升级为 Agent 时代的数据控制面,Snowflake 和 Databricks 有哪些布局
大数据·数据库·agent
ClouGence11 小时前
SQL Server CDC 能放到 Always On 备库读吗?一文讲透原理与实践
数据库·sql server
先吃饱再说1 天前
存储的进化:从 MySQL 到浏览器缓存,数据到底住在哪?
数据库
Nturmoils1 天前
字段太多看不全,ksql 的展开模式和输出控制怎么用
数据库·后端
Databend1 天前
Agent 轨迹分析与归因的数据工程实践
大数据·数据库·agent
这个DBA有点耶1 天前
SQL改写进阶:标量子查询的“隐形代价”与消除实战
数据库·mysql·架构
smallyoung1 天前
数据库乐观锁深度解析:MySQL、PostgreSQL 实战 + Spring Boot 集成指南
数据库·mysql·postgresql