


下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、SQL数据库面试题1、SQLSREVE中,向一个表中插入了新数据,如何快捷的得到自增量字段的当前值这种情况其实我们经常用到,比如我们新建了一个用户,建立完用户后我们希望马上得到这个新用户的 ID,因为我们一般都是把这种用户ID的字段设置成自增长类型的,乍看起来好像没有要得到那个新 ID 很麻烦,其 实 sql server 内置了一些全局的变量,使我们很容易就得 到那个新的自 增字段的ID,就是使用IDENTITY在 一 条 INSERT、 SELECTINTO 或 大 容 量 复 制 语 句 完 成 后 ,IDENTIT Y中包含语句生成的最后一个标识值。如果语句未影响任何包含标识列的表,则
2、 IDENTITY返回NULLo如果插入了多个行,生成 了多个标识值,则IDENTITY将返回最后生成的标识值。女口果语句触发了一个或多个触发器,该触发器又执行了生成标识值的插入操作,那么,在语句执行后立即调用 IDENTITY将返回触发器生成的最后一个 标识值。在具体应用中可以这样来写 SQL语句:stringstrSql="INSERTINTOUser (Na me, Login Name, Pwd,RegTime,lsSuper, Remark)" +"VALUES(Name,LoginName,Pwd,RegTime,lsSuper,Remark);s e
3、lect ID ENTITY;"执行的时候直接用comma nd.ExecuteScalar(就可以了,能直接返回该条记录的 UserID;解答二:经过实验,得如下结论:select DISTINCT IDENTITY as iden from FaWen解释:上述语句对 SQLSERVE的一个会话,也就是一条连接,返回该连接最后一条插入记录得到的自增字段的值。假设有3个程序,分别连接 SQLSERVE有三个连接。3个程序都向 同一 个表依顺序插入数据,得到的值分别是 1、2、 3,那么,只要 3 个程序对 SQL的连接还保持着,第一个程序使用上述语句,将得到 1,而不是3,第 二个
4、程序将得到 2,也不是 3。第三个程序得到 3。因此,用上述语句可以得到自己刚才插入记录的自增字段的值,不怕其它程序的并发插入操作。上述语句中,使用 DISTINCT勺原因是,虽然返回的值是当前连接 插入操 作得到的最大值,但返回的相同值的记录有多条。条数等于当前多个连接一共插入的记录数。实验方法:启动三个 Query analyzer 查询分析器,分别执行插入操作 后 再做上述取自增字段值的操作我利用rs.addnew增加一条记录时,如何同时获取自增 1 字段 ID 的当前值,而无须 再进 行一次查询来获取!因为我立即要用到该 ID 值,如果在增加记 录完毕后 再利用 select id 进
5、行一次查询无疑会使系统受限,有办法吗?如果你能保证数的话可以用rs.moveend ,当指针在最后一条记录时 count 是全部行数rs.count2、什么叫做SQL注入,如何防止?请举例说明SQL注入就是在正常的 SQL执行语句中恶意插入攻击者想要运行的sql语句,比如,我们有一个方法是这么写的:public static bool Login(string loginName,string pwd)string strSql = string.Format("select * from User where LoginName = '0' and Pwd =
6、39;I' ",loginName,pwd);如果我传给 loginname 的值是, or 1=1-, 那么这个 sql 语句成了 select * from User where LoginName = " or 1=1-', 这样不管我密码输入什 么, 肯定都是符合条件的。当然这只是最简单的情况,如果我把loginname的值改成or l=l;delete from user-,那么后果不堪设想,如果我通过sql来执行net use相关的命令,就可能在服务器上给自己加一个帐号,这样就逐步可以控制整个数据库所在的服务器。-这就是sql注入的通常方法和可能
7、的损害。要放置其实也很简单,可以通过至少两个方法来进行:1. 最根本的,不实用组合 sql的方法,而是通过使用命令参数方式来执行命令,比如我们把 sql改成这种方式:stri ng strSql = "select * from user where Log inN ame =Log inN ame and Pwd =Pwd,然后通过sqlcommand来执行它,就可以从根本上解决这个问题。2. 控制参数的长度。因为要想进行 sql注入的话,需要一定长度的字符串才能执行,如果我们规定LoginName的长度最长不超过8个,一般不会造成损害,当然这个只是在特殊的情况下才使用,比如有些情
8、况可能不能使用命令参数方式。点评:sql注入是我们编程时必须考虑的问题,特别是 BS的程序,更是要严 格 检查是否有sql注入的漏洞。最关键的一点是,你要明白怎么解决这个问题,一般面试人员会希望你提高使用参数方式来防止注入。3. 游标的作用?如何知道游标已经到了最后?关系数据库中的操作会对整个行集起作用。由 SELECT句返回的行 集包 括满足该语句的 WHERE子句中条件的所有行。这种由语句返回的完整行集称为结果集。应用程序,特别是交互式联机应用程序,并不总能将整个结果集作为一个单元来有效地处理。这些应用程序需要一种机制以便每次处理一行或一部分行。游标就是提供这种机制的对结果集的一种扩展。游
9、标的特点是: 允许定位在结果集的特定行。 从结果集的当前位置检索一行或一部分行。 支持对结果集中当前位置的行进行数据修改。 为由其他用户对显示在结果集中的数据库数据所做的更改提供不同 级别 的可见性支持。提供脚本、存储过程和触发器中用于访问结果集中的数据的Tran sact-SQL语句在从游标中提取信息后,可以通过判断 FETCH_STATU的值来判断 是否到了最后。当 FETCH_STATU为0的时候,说明提取是成功 的, 否则就可以认为到了最后。点评:游标是进行数据库操作的一个重要概念,但是在现代的软件开发中应用的不是很多,只有在一些特殊的存储过程中才会应用。但是,毕竟这是一个很重要,也是
10、我们必须掌握的概念,最好能理解它的原理和 用法。4> SQLServe的两种索引是何形式?索引的作用?索引的优缺点?sql server的索引分为聚集索引和非聚集索引,下面分别说明:弓I聚集蚤引根据数据行的键值在表或视图中排序和存储这些数据行。索引定义中包含聚集索引列。每个表只能有一个聚集索引,因为数据行本身只能按一个顺序排序。只有当表包含聚集索引时,表中的数据行才按排序顺序存储。如果表具有聚集索引,则该表称为聚集表。如果表没有聚集索引,则其数据行存储在一个称为堆的无序结构中。非聚集索弓 I 非聚集蚤引具有独立于数据行的结构。非聚集索引包含非聚集索引键值,并且每个键值项都有指向包含该键值
11、的数据行的指针。从非聚集索引中的索引行指向数据行的指针称为行定位器。行定位器的结构取决于数据页是存储在堆中还是聚集表中。对于堆,行定位器是指向行的指针。对于聚集表,行定位器是聚集索引键。索引的作用主要是为了在查询时提高查询的效率,并且尽量减小更新时的开销。优点: 设计良好的索引查询效率可以得到极大的提高,某些情况下甚至可以 提 高几百上千倍。缺点:需要占用额外的空间和资源。在更新时耗费的时间更大,因为对数据 的 更新很有可能会导致索引的更新,这样就会导致增加系统开销。点评:在所有的进行系统优化的选择中,索引都是第一位的,一个设计良好 的 数据库肯定需要高超的索引设计技巧,在这方面效率提高不是一
12、倍两倍的问题,而是可能会有质的飞跃,对索引优化的重要性,在一个大型项目里,怎么说都不为过。但是,索引优化又是比较困难的,哪些列需要加入索引,列的顺序怎样,哪个索引需要设置为聚集索引等等,都是我们必须要考虑的问题。5、事务是什么?事务是单个的工作单元。如果某一事务成功,则在该事务中进行的所 有数据修改均会提交,成为数据库中的永久组成部分。如果事务遇到错误且必须取消或回滚,则所有数据修改均被清除。也就是说,事务是由一系列的 “原子 ”操作组成的,这些原子操作必 须全部完成,否则所有的动作都会被取消并恢复到初始状态。开始事务使用 BEGINTRANSACTIOr语句显,以 COMMIT或ROLLBACK 语句结束。以上是针对数据库来说的。但是,事务不仅仅限于数据库,数据库以外的动作也可以被组合进事务中,一般称为 “ 企业级事务 ”。举一个例子:我们有这两个操作必 须都 完成,即在向数据库插入一条记录后必须在硬盘的某个文件夹内 创建一 个文件,这个就是一个企业级事务,它超出了简单的数据库事务的范畴。我们可以通过编程来实现企业级事务。点评:事务是数据库开发中一个非常重要的概念,它对与保证数据库的完整 性 和一致性非常重要。对于事务的的C#弋码实现更是务必要熟练掌 握。6、存储过程和函数的区别存储过程,功能强大,可以执行包括修改表等一系列数据库操作,也可以创建为SQL S
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 项目出资合同协议书范本
- 物流公司的采购合同范本
- 门面房车位出租合同范本
- 消防施工协议合同书范本
- 汉中酒店承包联营协议书
- 电商app开发合同范本
- 申请延期的补充合同范本
- 派出所门面出租合同范本
- 父子结婚房子协议书范本
- 污泥处理外包合同协议书
- 2025年中远海运集团招聘笔试备考题库(带答案详解)
- 《税法》经管类专业全套教学课件
- 2025至2030儿童安全椅市场发展趋势分析与未来投资战略咨询研究报告
- 酒精所致精神障碍护理查房
- 长期卧床患者的并发症与护理
- 水淹车培训课件
- 杭州市2024-2025学年高一下学期6月期末考试-物理试卷及答案
- 2025年全国统一高考语文试卷(全国一卷)含答案
- 前台物业收费管理制度
- T/ISEAA 006-2024大模型系统安全测评要求
- T/DZJN 03-2019即热式饮水电加热器具能效限定值及能效等级
评论
0/150
提交评论