- 1. 什么是sql注入?如何避免sql注入?
- 2. 数据库三范式是什么?
- 3. 维护数据库的完整性、一致性、你喜欢用触发器还是自写业务逻辑?为什么?
- 4. 什么是事务?什么是锁?
- 5. 什么是索引,有什么优点?
- 6. 视图是什么?游标是什么?
- 7. 什么是存储过程?有什么优点?
- 8. 什么是触发器?
- 9. C#种索引器实现过程,是否只能根据数字索引?
- 10. 死锁的必要条件?怎么克服?
- 11. 对数据的并发采用什么办法进行处理较好。
- 12. 如何处理几十万条并发数据?
- 13. 请说出SQL Server中三种表连接的方式inner join、left join、right join的区别及对最终查询的结果的影响。
- 14. 在SQL server中存储过程和函数的区别?
- 15. 数据库索引是什么?有什么作用?
- 16. SQL Server中索引的分类及区别?主键索引、聚集索引、非聚集索引聚集索引和非聚集索引的区别
- 17. 什么是事务?它有哪些特性?
- 18. SQL Server中,触发器分为哪几种?分别代表什么含义?
- 19. 在SQL Server中union和union all的区别?
- 20. SQL Server中排名函数有哪些?以及它们的区别?
- 21. SQL Server中,向一个表中插入了新数据,如何得到自增长字段的当前值?
- 22.谈谈SQL中视图的概念、以及它的有点
1. 什么是sql注入?如何避免sql注入?
用户根据系统的程序构造非法的参数从而导致程序执行不是程序员期望的恶意SQL语句。
使用参数化的SQL就可以避免SQL注入。
例子:利用sql语言漏洞获得合法身份登陆系统。如身份验证的程序设计成:这段代码容易被sql注入。如用户在t_name中随便输入,在t_pwd中输入1’ and 1=’1 就可以进入系统了。
SqlCommand com=new SqlCommand("Select * from users where username='"+t_name.text+"' and pwd='"+t_pwd.text+"'");
object obj=com.ExcuteScale();
if(obj!=null)
{
//通过验证
}
2. 数据库三范式是什么?
用自己的话解释,而不是背概念。
第一范式:字段不能有冗余信息,所有字段都是必不可少的。
第二范式:满足第一范式并且表必须有主键。
第三范式:满足第二范式并且表引用其他的表必须通过主键引用。
员工内部→自己的老大→外部的老大
记忆顺序:自己内部不重复→别人引用自己→自己引用别人。
3. 维护数据库的完整性、一致性、你喜欢用触发器还是自写业务逻辑?为什么?
尽可能用约束(包括CHECK、主键、唯一键、外键、非空字段)实现,这种方式的效率最好;
其次用触发器,这种方式可以保证无论何种业务系统访问数据库都能维持数据库的完整性、一致性;
最后再考虑用自写业务逻辑实现,但这种方式效率最低、编程最复杂,当为下下之策。
4. 什么是事务?什么是锁?
事务是指一个工作单元,它包含了一组数据操作命令,并且所有的命令作为一个整体一起向系统提交或撤消请求操作,即这组命令要么都执行,要么都不执行。
锁是在多用户环境中对数据的访问的限制。SqlServer自动锁定特定记录、字段或文件,防止用户访问,以维护数据安全或防止并发数据操作问题,锁可以保证事务的完整性和并发性。
5. 什么是索引,有什么优点?
索引与书的目录类似,索引使数据库程序无需扫描整个表,就可以在其中找到所需要的数据,索引包含了一个表中包含值的列表,其中包含了各个值的行所存储的位置,索引可以是单个或一组列,索引提供的表中数据的逻辑位置,合理划分索引能够大大提高数据库性能。
6. 视图是什么?游标是什么?
视图是一种虚拟表,虚拟表具有和物理表相同的功能,可以对虚拟表进行增该查操作;视图通常是一个或多个表的行或列的子集;视图的结果更容易理解(修改视图对基表不影响),获取数据更容易(相比多表查询更方便),限制数据检索(比如需要隐藏某些行或列),维护更方便。
游标对查询出来的结果集作为一个单元来有效的处理,游标可以定位在结果集的特定行、从结果集的当前位置检索一行或多行、可以对结果集中当前位置进行修改、
7. 什么是存储过程?有什么优点?
存储过程是一组予编译的SQL语句
它的优点:
- 允许模块化程序设计,就是说只需要创建一次过程,以后在程序中就可以调用该过程任意次。
- 允许更快执行,如果某操作需要执行大量SQL语句或重复执行,存储过程比SQL语句执行的要快。
- 减少网络流量,例如一个需要数百行的SQL代码的操作有一条执行语句完成,不需要在网络中发送数百行代码。
- 更好的安全机制,对于没有权限执行存储过程的用户,也可授权他们执行存储过程。
8. 什么是触发器?
触发器是一种特殊类型的存储过程,出发器主要通过事件触发而被执行的,
触发器的优点:
- 强化约束,触发器能够提供比CHECK约束;
- 跟踪变化,触发器可以跟踪数据库内的操作,从而不允许未经允许许可的更新和变化;
- 联级运算,比如某个表上的触发器中包含对另一个表的数据操作,而该操作又导致该表上的触发器被触发
9. C#种索引器实现过程,是否只能根据数字索引?
不是的,可以是任意类型。10. 死锁的必要条件?怎么克服?
系统的资源不足,进程的推进的顺序不合适,资源分配不当,一个资源每次只能被一个进程使用,一个资源请求资源时,而此时这个资源已阻塞,对已获得资源不放,进程获得资源时,未使用完前,不能强行剥夺。11. 对数据的并发采用什么办法进行处理较好。
可以控制连接池的连接数量,条件好的话可以用负载平衡12. 如何处理几十万条并发数据?
用存储过程或事务。取得最大标识的时候同时更新..注意主键不是自增量方式这种方法并发的时候是不会有重复主键的..取得最大标识要有一个存储过程来获取。13. 请说出SQL Server中三种表连接的方式inner join、left join、right join的区别及对最终查询的结果的影响。
right join 的区别及对最终查询的结果的影响。
left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 (以左表数据为基准,不足补为 NULL) right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录(以右表数据为基准,不足补为 NULL)
inner join(等值连接) 只返回两个表中联结字段相等的行(条件 on 之相等的数据)
14. 在SQL server中存储过程和函数的区别?
1.存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。
2.存储过程来可以返回参数,而函数只能返回值或者表对象。
3.存储过程一般是作为一个独立的部分来执行,而函数可以作为查询语句的一个部分来调用
15. 数据库索引是什么?有什么作用?
索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构
意义就是通过缩小一张表中需要查询的记录(行)的数目来加快搜索的速度。
16. SQL Server中索引的分类及区别?主键索引、聚集索引、非聚集索引聚集索引和非聚集索引的区别
1.聚集索引一个表只能有一个,而非聚集索引一个表可以存在多个。
2.聚集索引存储记录是物理上连续存在,而非聚集索引是逻辑上的连续,物理存储并不连续。
3.聚集索引查询数据速度快,插入数据速度慢;非聚集索引反之。
17. 什么是事务?它有哪些特性?
事务:所谓事务就是用户定义的一个数据库操作系列,这些操作要么全不做要么全做,是一个不可分割的工作单位。
事务有四个特性,分别是:原子性、一致性、隔离性、持续性
18. SQL Server中,触发器分为哪几种?分别代表什么含义?
1 、 DML 触发器,当数 据库中表中的数据发生变化时,包括 insert,update,delete 任意操作,如果对该表写了对应的 DML 触发器,那么该触发器自动执行。
2、 DDL 触发器,是 Sql Server2005 新增的触发器,主要用于审核与规范对数据库中表,触发器,视图等结构上的操作。
3、 登录触发器,登录触发器将为响应 LOGIN 事件而激发存储过程。与 SQL Server 实例建立用户会话时将引发此事件。登录触发器将在登录的身份验证阶段完成之后且用户会话实际建立之前激发。
19. 在SQL Server中union和union all的区别?
⒈UNION 和 UNION ALL 关键字都是将两个结果集合并为一个,但这两者从使用和效率上来说都有所不同。
⒉对重复结果的处理:UNION 在进行表链接后会筛选掉重复的数据,UNION ALL 不会去除重复的数据。
⒊对排序的处理:UNION 将会按照字段的顺序进行排序;UNION ALL 只是简单的将两个结果合并后就返回。
⒋从效率上说,UNION ALL 要比 UNION 快很多,所以,如果可以确认合并的两个结果集中不包含重复数据且不需要排序的话,那么就使用 UNION ALL。
20. SQL Server中排名函数有哪些?以及它们的区别?
ROW_NUMBER
函数实际上是一个序列,每个分组内都会创建一个序列,序列从1 开始,按照顺序依次 +1 递增。
RANK
函数用于排名时,不会返回连续的整数。RANK 函数的语法是:在分组内,按照特定的顺序排名,序号从 1 依次递增,排名函数以 tie 为单位,每个 tie 中的所有行的排名是相同的,排名可能是不连续的。
DENSE_RANK
函数用于排名时,会返回连续的整数。每个 tie 占用一个排名,每个 tie 中的所有行的排名是相同的。排名值是连续的
NTILE
在每个分组中,NTILE 按照指定的顺序,把数据行分为 N 个小组(tile),NTILE 返回小组编号。在每个分组内,具有相同的小组编号的数据行,位于同一个小组。
21. SQL Server中,向一个表中插入了新数据,如何得到自增长字段的当前值?
1.select SCOPE_IDENTITY() as id
2.select IDENT_CURRENT (‘Tb_People’)
3.select MAX(id) from Tb_People
22.谈谈SQL中视图的概念、以及它的有点
概念:
1、 视图是一张虚拟表,视图的字段是由我们自定义的,视图只供查询,数据不可更改,查询数据来源于我们建立的实体表。
2、 使用视图的优势?视图可以将多个复杂关联表,提取出我们需要的信息,优化查询速度。
优点:
第一点:使用视图,可以定制用户数据,聚焦特定的数据。
第二点:使用视图,可以简化数据操作。
第三点:使用视图,基表中的数据就有了一定的安全性
第四点:可以合并分离的数据,创建分区视图