SQL
外键简介:
A主键表里面有一列内容为B主键表的主键。那么该A主键表的改行内容就叫做外键,A表就叫做外键表。
DDL(数据定义语言,建表、建库等语句。)、DML(数据操作语言)和DCL (数据库控制语言)
DDL:(Create Table、DropTable、Alter Table等)//对表或是数据库进行操作
DML:Select、Insert、Update、Delete//对数据进行操作
DCL:GRANT 授权、REVOKE取消授权
存储过程(随取随用)
1.简介
存储过程 (Stored Procedure) 是在大型数据库系统中 , 一组为了完成特定功能的 SQL 语句集 , 存储在数据库中 , 经过第一次编译后再次调用不需要再次编译 , 用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数) 来执行它 , 存储过程是数据库中的一个重要对象 ; 存储过程中可以包
含 逻辑控制语句 和 数据操纵语句 , 它可以接受参数 , 输出参数 , 返回单个或多个结果集以及返回值 ;
2.存储过程优缺点:
优点:
1. 由于应用程序随着时间推移会不断更改 , 增删功能 , SQL 语句会变得更复杂 , 存储过程为封装此类代码提供了一个替换位置 ;
2. 由于存储过程在创建时即在数据库服务器上进行了编译并存储在数据库中 , 所以存储过程运行要比单个的SQL 语句块要快 ;
3. 由于在调用时只需用提供存储过程名和必要的参数信息 , 所以在一定程度上也可以减少网络流量 , 简单网络负担 ;
4. 可维护性高 , 更新存储过程通常比更改 , 测试以及重新部署程序集需要较少的时间和精力 ;
5. 代码精简一致 , 一个存储过程可以用于应用程序代码的不同位置 ;
6. 增强安全性 :
1. 通过向用户授予对存储过程 (而不是基于表) 的访问权限 它们可以提供对特定数据的访问 ;
2. 提高代码安全 , 防止 SQL注入 (但未彻底解决 , 例如将数据操作语言 DML 附加到输入参数) ;
3. SQLParameter 类指定存储过程参数的数据类型 , 作为深层 次防御性策略的一部分 , 可以验证用户提供的值类型 (但也不是万无一失 , 还是应该传递至数据库前得到附加验证) ;
缺点:
-
如果更改范围大到需要对输入存储过程的参数进行更改 , 或者要更改由其返回的数据 , 则仍需要更新程序集中的代码以添加参数 , 等等 ;
-
可移植性差 , 由于存储过程将应用程序绑定到 Server , 因此使用存储过程封装业务逻辑将限制应用程序的可移植性 ; 如果应用程序的可移植性在您的环境中非常重要 , 则将业务逻辑封装在不特定于 RDBMS 的中间层
触发器(动态变化)
1.简介:
触发器的作用:
自动化操作,减少了手动操作以及出错的几率。
触发器是一种特殊类型的存储过程,它不同于前面介绍过的一般的存储过程。【在SQL内部把触发器看做是存储过程但是不能传递参数】
一般的存储过程通过存储过程名称被直接调用,而触发器主要是通过事件进行触发而被执行。
触发器是一个功能强大的工具,在表中数据发生变化时自动强制执行。触发器可以用于SQL Server 约束、默认值和规则的完整性检查,还可以完成难以用普通约束实现的复杂功能。
那究竟何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序。触发器是一个特殊的存储过程。
2.总:作用就是备份和特殊的存储过程
3.触发器使用的表inserted表和deleted表
-
deleted表存放由于执行delete或update语句而要从表中删除的所有行。
在执行delete或update操作时,被删除的行从激活触发器的表中被移动(move)到deleted
表,这两个表不会有共同的行。 ----删除时会将删除的数据放在deleted表中,写触发器时,将数据从该表中提取出来,放入新表中。。。inserted表同
-
inserted表存放由于执行insert或update语句而要向表中插入的所有行。
在执行insert或update事物时,新的行同时添加到激活触发器的表中和inserted表中, inserted表的内容是激活触发器的表中新行的拷贝。
说明:update事务可以看作是先执行一个delete操作,再执行一个insert操作,旧的行首先被移动到deleted表,让后新行同时添加到激活触发器的表中和inserted表中。
4.种类:
After触发器:
在语句执行完毕之后触发
按语句触发,而不是所影响的行数,无论所影响为多少行,只触发一次。只能建立在常规表上,不能建立在视图和临时表上。(*) 可以递归触发, 高可达32级。
update(列),在update语句触发时,判断某列是否被更新,返回布尔值。介绍如何编写after触发器。
instead of触发器
用来替换原会递归触发,可以在约束被检查之前,触发可以建在表和视图上(*)
视图(方便查询)
1.简介:
视图是一张虚拟表,它表示一张表的部分数据或多张表的综合数据,其结构和数据是建立在对表的查询基础上,以表为基础建立视图,建立后便会存在数据库里面
视图在操作上和数据表没有什么区别,但两者的差异是其本质是不同:数据表是实际存储记录的地方,然而视图并不保存任何记录。
相同的数据表,根据不同用户的不同需求,可以创建不同的视图(不同的查询语句)视图的目的是方便查询,所以一般情况下不能对视图进行增删改表里面 的内容改变,相对应的视图数据就会改变
多次使用复杂代码时,就创建一个视图,谨记!!!!不建议修改视图,若需求改变,则 好重新建立一个视图优点:
筛选表中的行\降低数据库的复杂程度防止未经许可的用户访问敏感数据
索引(加快查询)
1.简介:
(1)与之对应的为全表扫描,对数据进行检索(select)效率差的是全表扫描,就是一条条的找。
(2) 如果没有目录,查汉语字典就要一页页的翻,而有了目录只要查询目录即可。为了提高检索的速度,可以为经常进行检索的列添加索引,相当于创建目录。
创建索引的方式,在表设计器中点击右键,选择“索引/键”→添加→在列中选择索引包含的列。
使用索引能提高查询效率,但是索引也是占据空间的,而且添加、更新、删除数据的时候也需要同步更新索引,因此会降低Insert、Update、Delete的速度。只在经常检索的字段上(Where) 创建索引。
(*)即使创建了索引,仍然有可能全表扫描,比如like、函数、类型转换等。年龄索引,以姓名查看。
(3)分类
索引相当于字典中的目录,加快查询速度, 在执行增删改的时候降低了速度
聚集索引
相当于字典中拼音目录, 拼音目录的顺序和数据的顺序是一致的, 一个表中只能有一个聚集索引。索引的排序顺序与表中数据的物理存储位置是一致的,一般新建主键列后回自动生成一个聚集索引。
非聚集索引(逻辑上的排序 )
一个表中可以有多个非聚集索引, 相当于字典中笔画目录, 笔画目录的顺序和数据是无关的 .