sql知识整理(1)

存储过程概念,优点

what:存储过程是数据库对象,用于存储用T-SQL编写的程序

why:1)更好的性能。因为sqlserver在它第一次执行时就生成并缓存了存储过程的执行计划。
       2)更好的维护和访问。它集中在一个地方,能够使三层架构的实现更加简单(存储过程将组成数据层)
       3)安全。sqlserver可以为每一个存储过程设置不同的安全许可;而在c#代码中创建的sql查询,更容易受到sql注入攻击

  


视图

what:是虚拟表,实际是一组查询,而不是物理存在的数据表。所以视图嵌套或和视图联接使用可能会造成性能瓶颈
why:1)增加代码重用。特别是联接查询会很方便
         2)可以对不同的视图赋予不同的权限
视图是一组查询,因此比起普通查询没有性能优势,主要是为了代码复用

视图不能索引,也不能有关联的触发器或默认值
许多DBMS禁止在视图查询中使用ORDER BY子句
有的DBMS要求命名返回所有列,如果列是计算字段,则需要使用别名
有的DBMS把视图视为只读的查询,这表示可以从视图检索数据,但不能将数据写回底层表

索引概念,优点

what 索引

索引是一种特殊的数据库对象,用来提高数据库操作的整体速度。它通过维护特殊的数据结构来映射已索引表的内容,这将大大加速该表的查找操作

why 索引以及它的弊端
优点:
 索引将能够提高从表中读取数据的速度,
缺点:
1)但会降低插入,删除,更新操作的速度,因为使用这些操作,数据服务器不仅需要修改该表,还要修改索引创建的额外的数据结构。在实际的应用程序中,绝大多数的数据库操作都是读取操作,因此使用索引将会明显提高性能
2)占用空间多一些

在一个表中可以创建多个索引,每个索引可以包含一个或多个列。当一个表按某个列创建了索引后,不是行被索引,就是根据该列的值和索引类型被物理索引


对于索引,应该注意以下内容:

  • 索引可以加快数据库查询操作,但同时会减慢更改数据库的操作(删除、更新和插入操作)。
  • 太多索引会降低数据库性能。通常的做法是,在where,order by 和 group by子句中常用的列,以及常用于表连接、与其他表进行关联的外键列创建索引
  • 默认情况下,主题和唯一表列会自动创建索引

unique和primary Key的异同

共同点
1)都用来确保数据数据的唯一性
2)unique和primary key都会自动创建索引
不同:
1)不同于主键,unique不能应用于多字段
2)每个数据表可以有多个unique约束
3)unique允许null值,但只允许一个null值




。.NET和SQL Server中“空值”辨析
初学数据库编程我们可能会有一些对“空值”的疑问,比如通过编程新建的一个表中所有数据皆显示为<NULL>,手动添加并删除文字后又 变成了空白;一个字符串类型的字段,明明没有填值,却不等于"";用ADO.NET从数据库中取值,每遇到有<NULL>的就出错……这需要 我们正确认识.NET和SQL Server中几种不同的“空值”。
  1、真正的空值,也就是“没有输入的值”,可以出现在大多数类型的字段中(如果没有别的约束条件),SQL server中表示为null,显示为<NULL>,手工在SQL server企业管理器中输入的方法是按Ctrl+0。它在.NET中对应System.DBNull.Value。在T-SQL命令中,判断一个值是不 是空值,要用“is null”而不是“= null”;处理空值有个ISNULL函数,它使用指定的值替换null。用ADO.NET从数据库得到的空值无法自动转化为空字符串或Nothing, 须手动检测:如果得到System.DBNull.Value,则赋给数据对象Nothing或其它自定义的有意义的值。
  2、空字符串(零长度字符串),只出现在字符串类型(如nvarchar)的字段中,SQL server中表示为''",显示为空白,手工在SQL server企业管理器中输入时清空一个单元格即可。它在.NET中对应System.String.Empty,也就是我们常用的""。在T-SQL命 令中处理空字符串和处理一般的字符串没什么区别。用ADO.NET从数据库得到的空字符串也和一般的字符串没什么区别。
  相关的概念还有VB.NET中的Nothing和对应于C#.NET中的null(注意这个null是C#.NET中的null而非SQL Server中null),它们在.NET中是表示不引用任何对象的空引用的值,在传入SQL server时,根据不同的上下文环境,可能存为真正的空值(比如在更新一个字符串类型的字段值时),也可能调用在SQL server中自定义的默认值(比如传给一个有默认值的存储过程参数),也可能因为无法进行类型转换而引发.NET异常。因此在用ADO.NET向SQL server中存储数据时要慎用Nothing。


null表示“未定义”或“没有任何输入”,与空字符串(零长度字符串)是两个不同的概念。在T-SQL中用is null来判断,在.net中用DBNULL.Value来判断


写一条SQL查询语句将表中年龄为空的值更新为25。不使用(update)
select isnull(age, 25)

原文地址:https://www.cnblogs.com/eversteins/p/2165506.html