云顶娱乐平台 2

云顶娱乐平台:SQL Server —数据库构成和管理工具

学习SQL Server 2012编程入门经典(第4版)的笔记

关系数据库管理系统(RDBMS)

 

调用语法

  2.2触发器

  触发器是在操作表的时候(CRUD)自动执行一段逻辑代码。

事务日志

数据从数据库文件中读取,但实际上,任意数据库的更改起初
不进入数据库的更改,而是被不断的写入到事务日志中的。日志是数据进入磁盘的最先位置,然后被传入实际数据库

数据库文件和事务日志一起完成数据库功能。

 

7.什么叫视图?游标是什么?

答:视图是一种虚拟的表,具有和物理表相同的功能。可以对视图进行增,改,查,操作,试图通常是有一个表或者多个表的行或列的子集。对视图的修改不影响基本表。它使得我们获取数据更容易,相比多表查询。

游标:是对查询出来的结果集作为一个单元来有效的处理。游标可以定在该单元中的特定行,从结果集的当前行检索一行或多行。可以对结果集当前行做修改。一般不使用游标,但是需要逐条处理数据的时候,游标显得十分重要。

5.2.2带输入参数的存储过程

5.视图

  视图是一种虚拟表(不包含数据,其它与表类似)。

SQL Server 配置管理器

主要分为两个部分 : 服务管理   网络配置

 

服务管理 :安装完整的SQL Server包括9个服务,其中7个服务可以使用sql
server配置管理器这一部分来管理(另外2个 是作为后台支持的服务)

     7个包括:

云顶娱乐平台 1

 网络配置 :**

  提供的NetLib包括 4个:

 VIA (硬件存储器供应商可能支持的特殊虚拟接口)

云顶娱乐平台 2

 

协议:为了让客户机与服务器进行连接,服务器必须
侦听协议,而客户机使用该协议试图与服务器通信,如果是TCP/IP
协议,则要在相同端口上。

TCP/IP
在这个连接来有介绍到 

 

SQL Server 集成服务

功能很强大,可以从各种数据源取得数据,并将数据输入到SQL
Server数据表。是一种数据转换服务,数据转换本质上是指按照某种逻辑规则处理数据。

 

Bulk Copy Program

老的帮助工具。是命令行程序,其主要目的是将导入导出SQL
Server的数据全部格式化。

 

SQL Server Profiler

实质上是实时跟踪工具,跟踪细节,具有很强的过滤功能。

sqlcmd

控制台应用程序。

PowerShell

它是一个非常健壮的脚本和服务器导航引擎。可以导航服务器上所有的对象。

 

 

5.2.1不带参数的存储过程

3.文件组 

  默认情况下,表及其他对象要存储在一个文件中,默认情况下,该文件就是文件组的主要成员。

       用户可以自己创建自定义文件组。

数据库对象

 

索引  
是仅在特定表或视图架构内存在的对象。是一个或多个键的集合,每个键指向表中的一行。使用索引是快速查找数据库中实际信息的一种方法。

     分为2类
聚集索引—-聚集索引确定表中数据的物理顺序。聚集索引类似于电话簿。由于聚集索引规定数据在表中的物理存储顺序,因此一个表只能包含一个聚集索引。

            但该索引可以包含多个列(组合索引),就像电话簿按姓氏和名字进行组织一样。

      
 非聚集索引—-非聚集索引与课本中的目录类似。数据存储在一个地方,索引存储在另一个地方,索引带有指针指向数据的存储位置。索引中的项目按索引键值的顺序存储,

             而表中的信息按另一种顺序存储  

 触发器   是在表操作时(插入、更新、删除等)自动执行的一段逻辑代码。

    理解:某个条件成立时,触发器里面所定义的语句就会被自动的执行。触发器不需要去调用,也不能调用。

 约束 
 是在任何业务中,数据通常必须符合特定限制或规则。例如,职员编号必须是
唯一的。数据库管理器提供了约束作为强制实施这种规则的方法。

 数据库关系图   是数据库设计器是一种可视化工具,它允许您对所连接的数据库进行设计和可视化处理。 

       设计数据库时,您可以使用数据库设计器创建、编辑或删除表、列、键、索引、关系和约束。 

       为使数据库可视化,您可创建一个或多个关系图,以显示数据库中的部分或全部表、列、键和关系。

 视图 
 视图是一个虚拟表,其内容由查询定义。视图在数据库中并不是以数据值存储集形式存在,除非是索引视图。视图通常用来集中、简化和自定义每个用户对数据库的不同认识。

 存储过程   是组成一个单元的T-SQL语句的有序集合。

 

21.默认的系统数据库有哪些?

1)master数据库(主);2)tempdb数据库(临时);3)model
数据库(模板);4)msdb数据库(计划任务);

1.4帐户管理.
1.4.1创建登录帐户.

2.表

  数据库中实际的数据都存在表中。表有行有列。

系统数据库

1.master数据库

保存一种特殊的表(系统表)用于系统的总体控制。所有扩展的存储过程和系统存储过程都存储在master
数据库中。

2.model 数据库

可以基于该模型得到一个副本。也就是说,如要想要改变
新建标准数据库的样式,可以根据需要去更改model数据库。但是强烈建议不要修改。

3.msdb 数据库

是 SQL Agent (sql server 代理)进程存储任意系统任务的地方。

4.tempdb数据库

是服务器主要工作区域之一。在执行一个复杂或者大型的查询操作时,sql
server可能会需要创造一些中间表来完成,而这就是在 tempdb中进行的

只要需要临时存储数据,就很可能是把数据存储在tempdb 数据库中。

10.什么是索引?SQL Server 里有什么类型的索引?

 简单地说,索引是一个数据结构,用来快速访问数据库表格或者视图里的数据。在SQL
Server里,它们有两种形式:聚集索引和非聚集索引。聚集索引在索引的叶级保存数据。这意味着不论聚集索引里有表格的哪个(或哪些)字段,这些字段都会按顺序被保存在表格。由于存在这种排序,所以每个表格只会有一个聚集索引。非聚集索引在索引的叶级有一个行标识符。这个行标识符是一个指向磁盘上数据的指针。它允许每个表格有多个非聚集索引。

复制代码 代码如下:

1.事务日志

  任意数据库的更改起初不进入数据库本身,而是不断地被写入到事务日志。

  日志是数据进入磁盘上的最先位置。

 

Declare @errorsum int
Set @errorsum=0
Update ……………………….
Set @errorsum=@errorsum+@@error
Update………………………..
Set @errorsum=@errorsum+@@error
If @errorsum<>0
Begin
Rollback transaction–回滚事务
End
Else
Begin
Commit transaction–提交事务
End
Go

4.数据库关系图

  数据库关系图是数据库设计的可视表示。

2.什么是存储过程?用什么来调用?

答:存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。可以用一个命令对象来调用存储过程。

 

2.2输出语句.
Print局部变量或字符串,以字符串形式打印数据 。
Select 局部变量AS自定义列名,以表格形式打印数据。
2.3逻辑控制语句.
2.3.1.If-else
If(表达式)
Begin
语句1
语句2
End
Else
Begin
语句1
语句2
End
2.3.2.case
Case
When 条件一 then 结果二
When 条件二 then 结果二
End

6.存储过程

  存储过程是SQL
Service编程功能的基础。存储过程通常是组成一个逻辑单元的Transact-SQL(SQL
Service 数据库查询语言)语句的有序集合。

     存储过程允许使用变量和参数,也可使用选择和循环结构。

 

11.什么是主键?什么是外键?

主键是表格里的(一个或多个)字段,只用来定义表格里的行;主键里的值总是唯一的。外键是一个用来建立两个表格之间关系的约束。这种关系一般都涉及一个表格里的主键字段与另外一个表格(尽管可能是同一个表格)里的一系列相连的字段。那么这些相连的字段就是外键。

复制代码 代码如下:

  2.3约束

       约束只能在表中,就是限制表中的数据满足某种条件。

 

Create proc procedureName
@number int =默认值,
@n varchar(20)
As
SQL 语句
Go
调用语法:
Exec procedureName 200,’lyh’
Exec procedureName @n=’lyh’

 2.1索引

  
索引是在特定表或视图框架内存在的对象。索引的功能类似于目录,可以加速信息的查找。

  索引分两类:

    群集索引—每个表只能有一个。群集索引按照其索引进行物理排序。列子:如果为百科全书做索引,群集索引就是页码。

    非群集索引—每个表可以有多个。非群集索引是指用于找到数据的其他一些值。列子:为百科全书做索引,非群集索引就是百科全书后面的关键字索引。

 

1.4.2创建数据库用户.

 

5.2.3带输出参数的存储过程

23.创建数据库时,能不能把数据文件和日志文件分开?

可以分开,起到优化作用。把数据文件放到高速读写区,把日志文件放到低速读写区。

定义触发器

 

二.T-SQL编程
2.1变量.
局部变量的名称必须以标记@作为前缀:
Declare @name varchar(8)–声明变量。
Declare @name varchar(8)=value–初始值。
Set @name=value– 赋值。
Select @name=value–赋值。
全局变量
SQL server中的所有全局变量都使用两个@标志作为前缀:

19.如何防范SQL注入式攻击?

好在要防止ASP.NET应用被SQL注入式攻击闯入并不是一件特别困难的事情,只要在利用表单输入的内容构造SQL命令之前,把所有输入内容过滤一番就可以了。过滤输入内容可以按多种方式进行。

⑴ 对于动态构造SQL查询的场合,可以使用下面的技术:

第一:替换单引号,即把所有单独出现的单引号改成两个单引号,防止攻击者修改SQL命令的含义。再来看前面的例子,”SELECT
* from Users WHERE login = ”’ or ”1”=”1′ AND password = ”’ or
”1”=”1′”显然会得到与”SELECT * from Users WHERE login = ” or ‘1’=’1′
AND password = ” or ‘1’=’1′”不同的结果。

第二:删除用户输入内容中的所有连字符,防止攻击者构造出类如”SELECT *
from Users WHERE login = ‘mas’ — AND password
=””之类的查询,因为这类查询的后半部分已经被注释掉,不再有效,攻击者只要知道一个合法的用户登录名称,根本不需要知道用户的密码就可以顺利获得访问权限。

第三:对于用来执行查询的数据库帐户,限制其权限。用不同的用户帐户执行查询、插入、更新、删除操作。由于隔离了不同帐户可执行的操作,因而也就防止了原本用于执行SELECT命令的地方却被用于执行INSERT、UPDATE或DELETE命令。


用存储过程来执行所有的查询。SQL参数的传递方式将防止攻击者利用单引号和连字符实施攻击。此外,它还使得数据库权限可以限制到只允许特定的存储过程执行,所有的用户输入必须遵从被调用的存储过程的安全上下文,这样就很难再发生注入式攻击了。


限制表单或查询字符串输入的长度。如果用户的登录名字最多只有10个字符,那么不要认可表单中输入的10个以上的字符,这将大大增加攻击者在SQL命令中插入有害代码的难度。


检查用户输入的合法性,确信输入的内容只包含合法的数据。数据检查应当在客户端和服务器端都执行——之所以要执行服务器端验证,是为了弥补客户端验证机制脆弱的安全性。

在客户端,攻击者完全有可能获得网页的源代码,修改验证合法性的脚本(或者直接删除脚本),然后将非法内容通过修改后的表单提交给服务器。因此,要保证验证操作确实已经执行,唯一的办法就是在服务器端也执行验证。你可以使用许多内建的验证对象,例如
RegularExpressionValidator,它们能够自动生成验证用的客户端脚本,当然你也可以插入服务器端的方法调用。如果找不到现成的验证对象,你可以通过CustomValidator自己创建一个。


将用户登录名称、密码等数据加密保存。加密用户输入的数据,然后再将它与数据库中保存的数据比较,这相当于对用户输入的数据进行了”消毒”处理,用户输入的数据不再对数据库有任何特殊的意义,从而也就防止了攻击者注入SQL命令。
System.Web.Security.FormsAuthentication类有一个HashPasswordForStoringInConfigFile,非常适合于对输入数据进行消毒处理。


检查提取数据的查询所返回的记录数量。如果程序只要求返回一个记录,但实际返回的记录却超过一行,那就当作出错处理。

4.2索引
索引是SQL server编排数据的内部方法。它为SQL
server提供一种方法来编排查询数据的路由
索引页:
数据库中的存储索引的数据页。索引页存放检索数据行的关键字页以及该数据行的地址指针。索引页类似于汉语字典中按拼音或笔画排序的目录页。
唯一索引:
唯一索引不允许两行具有相同的索引值.
主键索引:
在数据库关系图中为表定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型。主键索引要求主键中的每个值是唯一的。当在查询中使用主键索引时,它还允许快速访问数据。
聚集索引:
在聚集索引中,表中各行的物理顺序与键值的逻辑(索引)顺序相同。表只能包含一个聚集索引。
创建索引

6.什么是事务?什么是锁?

答:事务就是被绑定在一起作为一个逻辑工作单元的SQL语句分组,如果任何一个语句操作失败那么整个操作就被失败,以后操作就会回滚到操作前状态,或者是上有个节点。为了确保要么执行,要么不执行,就可以使用事务。要将有组语句作为事务考虑,就需要通过ACID测试,即原子性,一致性,隔离性和持久性。

锁:在所以的DBMS中,锁是实现事务的关键,锁可以保证事务的完整性和并发性。与现实生活中锁一样,它可以使某些数据的拥有者,在某段时间内不能使用某些数据或数据结构。当然锁还分级别的。

复制代码 代码如下:

5.维护数据库的完整性和一致性,你喜欢用触发器还是自写业务逻辑?为什么?

答:我是这样做的,尽可能使用约束,如check,主键,外键,非空字段等来约束,这样做效率最高,也最方便。其次是使用触发器,这种方法可以保证,无论什么业务系统访问数据库都可以保证数据的完整新和一致性。最后考虑的是自写业务逻辑,但这样做麻烦,编程复杂,效率低下。

 

Create proc procedureName
@number int output,
@name char(20)
As
SQL 语句
Set @number=1000
Go
调用语法
Declare @dd int
Exec procedureName @dd output,’lyh’

 

复制代码 代码如下:

13.您如何确保一个带有名为Fld1字段的TableB表格里只具有Fld1字段里的那些值,而这些值同时在名为TableA的表格的Fld1字段里?

这个与关系相关的问题有两个可能的答案。

第一个答案是使用外键限制。外键限制用来维护引用的完整性。它被用来确保表格里的字段只保存有已经在不同的(或者相同的)表格里的另一个字段里定义了的值。这个字段就是候选键(通常是另外一个表格的主键)。

另外一种答案是触发器。触发器可以被用来保证以另外一种方式实现与限制相同的作用,但是它非常难设置与维护,而且性能一般都很糟糕。由于这个原因,微软建议开发人员使用外键限制而不是触发器来维护引用的完整性。

Create proc procedureName
As
SQL 语句
Go

一、sql理论题

复制代码 代码如下:

3.索引的作用?和它的优点缺点是什么?

答:索引就一种特殊的查询表,数据库的搜索引擎可以利用它加速对数据的检索。它很类似与现实生活中书的目录,不需要查询整本书内容就可以找到想要的数据。索引可以是唯一的,创建索引允许指定单个列或者是多个列。缺点是它减慢了数据录入的速度,同时也增加了数据库的尺寸大小。

 

Alter table stuInfo add constraint PK_stuNo primary key(stuNo)—主键
alter table stuMarks add constraint FK_stuNo foreign key(stuNo)
references stuInfo(stuNo)—外键
alter table stuInfo add constraint UQ_stuID unique(stuID)—唯一约束
alter table stuInfo add constraint df_stuAddress default(‘地址不详’)
for stuAddres—默认约束
alter table stuMarks add constraint ck_stuAge check(stuAge between 15
and 40)—检查约束
alter table stuMarks drop constraint ck_stuAge—删除约束

14.对一个投入使用的在线事务处理表格有过多索引需要有什么样的性能考虑?

 对一个表格的索引越多,数据库引擎用来更新、插入或者删除数据所需要的时间就越多,因为在数据操控发生的时候索引也必须要维护。

If exists (select * from sysobjects where name=’Mytable’)
drop table Mytable
go
create table Mytable
(
ID int not null identity(1,1) primary
key,–标识种子1,标识增量1,设该列为主键
name nchar(10) not null,–不可为空
degree numeric(18,0)—身份证,numeric(18,0)代表18位数字,小数位数为0
)
Go

20.如何实现数据库的移动?

1)分离数据库;2)把数据文件、日志文件移动到其他路径上去;3)在另一台计算机上进行附加。

复制代码 代码如下:

8.你能向我简要叙述一下SQL Server 中使用的一些数据库对象吗?

答:表、索引、视图、存储过程、触发器、用户定义函数、数据库关系图、全文索引。

use master
go
if exists (select * from sysdatabases where
name=’MyDatabase’)—判断master数据库sysdatagbases表中是否存在将要创建的数据库名
drop database MyDatabase—如果sysdatabases表中存在该数据库名,则将它删除
go
exec xp_cmdshell ‘md
D:/MyDatabases’—利用存储过程创建一个文件夹用于存储数据物理文件(数据文件,日志文件),DOS命令(mkdir=md)
go
create database MyDatabase—创建数据库
on
(
name=’MyDatabase_data’,–指定逻辑文件名
filename=’D:/MyDatabases/MyDatabase_data.mdf’,–指定物理文件名
size=5mb,–初始大小
maxsize=50mb,–指定物理文件最大容量,可选
filegrowth=20%–增长量
)
log on
(
name=’MyDatabase_log’,–指定逻辑日志文件名
filename=’D:/MyDatabases/MyDatabase_log.ldf’,–指定日志物理文件名
size=5mb,–初始大小
maxsize=50mb,–指定日志物理文件最大容量,可选
filegrowth=20%–增长量
)
go
use MyDatabase
go

16.使用存储过程的经验。

返回参数总是由存储过程返回,它用来表示存储过程是成功还是失败。返回参数总是INT数据类型。

OUTPUT参数明确要求由开发人员来指定,它可以返回其他类型的数据,例如字符型和数值型的值。(可以用作输出参数的数据类型是有一些限制的。)您可以在一个存储过程里使用多个OUTPUT参数,而您只能够使用一个返回参数。

exec sp_grantdbaccess
‘jbtraining/s26301′,’s26301dbuser’–s26301dbuser为数据库用户名
exec sp_grantdbaccess ‘admin’, ‘s26301dbuser’–s26301dbuser为数据库名

18.什么是SQL注入式攻击?

所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQL注入式攻击。常见的SQL注入式攻击过程类如:

⑴ 某个ASP.NET
Web应用有一个登录页面,这个登录页面控制着用户是否有权访问应用,它要求用户输入一个名称和密码。


登录页面中输入的内容将直接用来构造动态的SQL命令,或者直接用作存储过程的参数。下面是ASP.NET应用构造查询的一个例子:

System.Text.StringBuilder query = new System.Text.StringBuilder(
“SELECT * from Users WHERE login = ‘”)
.Append(txtLogin.Text).Append(“‘ AND password='”)
.Append(txtPassword.Text).Append(“‘”);

⑶ 攻击者在用户名字和密码输入框中输入”‘或’1’=’1″之类的内容。


用户输入的内容提交给服务器之后,服务器运行上面的ASP.NET代码构造出查询用户的SQL命令,但由于攻击者输入的内容非常特殊,所以最后得到的SQL命令变成:SELECT
* from Users WHERE login = ” or ‘1’=’1′ AND password = ” or ‘1’=’1’。


服务器执行查询或存储过程,将用户输入的身份信息和服务器中保存的身份信息进行对比。


由于SQL命令实际上已被注入式攻击修改,已经不能真正验证用户身份,所以系统会错误地授权给攻击者。

如果攻击者知道应用会将表单中输入的内容直接用于验证身份的查询,他就会尝试输入某些特殊的SQL字符串篡改查询改变其原来的功能,欺骗系统授予访问权限。

系统环境不同,攻击者可能造成的损害也不同,这主要由应用访问数据库的安全权限决定。如果用户的帐户具有管理员或其他比较高级的权限,攻击者就可能对数据库的表执行各种他想要做的操作,包括添加、删除或更新数据,甚至可能直接删除表。

Trigger_name:是触发器的名称。触发器名称必须符合标识符规则,并且在数据库中必须唯一,。可以选择是否指定触发器所有者名称。
Table_name:是在其上执行触发器的表或视图
With encryption:加密syscomments表中包含create
trigger语句文本的条目。使用with
encryption可防止将触发器作为SQLserver复制的部分发布.
Create trigger:必须是批处理中的第一条语句,并且只能应用到一个表中。
触发器只能在当前的数据库中创建,不过触发器可以引用当前数据库的外部对象。

 

/*为s26301dbuser分配对表mytable的select,insert,updata,delete权限*/
grant select,insert,update,delete on mytable to s26301dbuser
/*为s26301dbuser用户分配创建表的权限
grant create table to s26301dbuser

17.什么是相关子查询?如何使用这些查询?

相关子查询是一种包含子查询的特殊类型的查询。查询里包含的子查询会真正请求外部查询的值,从而形成一个类似于循环的状况。

复制代码 代码如下:

9.NULL是什么意思?

NULL(空)这个值表示UNKNOWN(未知):它不表示“”(空字符串)。假设您的SQL
Server数据库里有ANSI_NULLS,当然在默认情况下会有,对NULL这个值的任何比较都会生产一个NULL值。您不能把任何值与一个
UNKNOWN值进行比较,并在逻辑上希望获得一个答案。您必须使用IS NULL操作符。

 

Exec procedureName

 

1.3加约束.

 

复制代码 代码如下:

 

一. 建库,建表,加约束.
1.1建库

 

复制代码 代码如下:

25.事务是什么? 

事务是作为一个逻辑单元执行的一系列操作,一个逻辑工作单元必须有四个属性,称为
ACID(原子性、一致性、隔离性和持久性)属性,只有这样才能成为一个事务:
1)原子性
事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。
2)一致性
事务在完成时,必须使所有的数据都保持一致状态。在相关数据库中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。事务结束时,所有的内部数据结构(如
B 树索引或双向链表)都必须是正确的。
3)隔离性
由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。这称为可串行性,因为它能够重新装载起始数据,并且重播一系列事务,以使数据结束时的状态与原始事务执行的状态相同。
4)持久性
事务完成之后,它对于系统的影响是永久性的。该修改即使出现系统故障也将一直保持。

 

If exists (select * from sysobjects where name-‘myview’)
Drop view myview
Go
Create view myview
As
Select 姓名=stuName,学员=sutInfo from stuInfo left join stuMarks
on stuInfo.stuNO=stuMarks.stuNo
Go

22.默认创建一个数据库,会生成哪些文件?

1)主文件(.mdf),2)日志文件(.ldf),无次要文件(.ndf)。

**六.SQL server触发器

1.触发器的作用?

答:触发器是一中特殊的存储过程,主要是通过事件来触发而被执行的。它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可以联级运算。如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。

 

**什么是触发器:
触发器是在对表进行插入,更新或删除操作时自动执行的存储过程。
触发器的类别
INSERT触发器:当向表中插入数据时触发,自动执行触发器所定义的SQL语句。
UPDATE触发器:当更新表中某列、多列时触发,自动执行触发器所定义的SQL语句。
DELETE触发器:当删除表中记录时触发,自动执行触发器所定义的SQL语句。
Deleted表:用于存储DELETE和UPDATE语句所影响的行的副本,即在DELETED表中临时保存了被删除或被更新前的记录行。在执行DELETE或UPDATE语句
,行从触发器表中删除,并传输到DELETED表中。由此我们可以从DELETED表中检查删除的数据行是否能删除。如果不能,就可以回滚撤销此操作,因为触发器本身就是一个特殊的事务单元。
Inserted表:用于存储INSERT和UPDATE语句所影响的行的副本,即在inserted表中临时保存了被插入或被更新后的记录行。在执行INSERT或UPDATE语句时,新加行被同时添加到INSERT表和触发器表中。由此我们可以从INSERTED检查插入数据是否满足业务需求。如果不满足,就可以向用户报告错误消息,并回滚撤销操作。

 

复制代码 代码如下:

24.什么是索引覆盖(Index Covering)查询? 

索引覆盖(Index Covering)查询是指数据可以只通过索引获取,而不用接触表。

三.高级查询
3.1子查询.
Select … from 表1 where 字段1>(子查询)
3.2IN和NOT IN子查询
Select … from 表1 where 字段一 NOT IN (子查询)
Select … from 表2 where 字段二 IN (子查询)
3.3Exists和Not Exists子查询
If exists(子查询)
语句
If not exists(子查询)
语句

12.什么是触发器?SQL Server 有什么不同类型的触发器?

触发器是一种专用类型的存储过程,它被捆绑到SQL Server
的表格或者视图上。在SQL Server
2000里,有INSTEAD-OF和AFTER两种触发器。INSTEAD-OF触发器是替代数据操控语言(Data
Manipulation Language,DML)语句对表格执行语句的存储过程。例如,如果我有一个用于TableA的INSTEAD-OF-UPDATE触发器,同时对这个表格执行一个更新语句,那么INSTEAD-OF-UPDATE触发器里的代码会执行,而不是我执行的更新语句则不会执行操作。AFTER触发器要在DML语句在数据库里使用之后才执行。这些类型的触发器对于监视发生在数据库表格里的数据变化十分好用。

myindex为索引名,with fillfactor=30,指定填充因子为30%
使用索引
Select * from stumarks (myindex) where writtenExam between 60 and 90
Stumarks为表名,myindex为索引名,writtenexam为列名,between 60 and 90
指定查询出writtenexam字段60至90之间的值
建立索引的条件
Ø 该列用于频繁搜索
Ø 该列用于对数据进行排序
禁止使用索引的情况
云顶娱乐平台,Ø 列中仅包含几个不同的值
Ø 表中数据仅包含几行,为小型表创建索引可能不太划算,因为SQL
server在索引中搜索数据所花的时间比在表中逐行搜索所花的时间更长
4.3视图
视图的用处
Ø 筛选表中的行
Ø 防止未经许可的用户访问敏感数据
Ø 降低数据库的复杂程度
Ø 将多个物理数据表抽象为一个逻辑数据表
使用视图的好处
ü 对最终用户的好处
l
结果更容易理解。创建视图时,可以将列名改为有意义的名称,使用户更容易理解列所代表的内容。在视图中修改列名不会影响基表的列名
l
获得数据更容易。很多人对SQL不太了解,因此对他们来说创建对多个表的复杂查询很困难。因而可以通过创建视图来方便用户访问多个表中的数据。
ü 对开发人员的好处
l
限制数据检索更容易。开发人员有时需要隐藏某些行或列中的信息。通过使用视图,用户可以灵活地访问他们需要的数据,同时保证同一个表或其他表的其他数据库的安全性。要实现这一目标,可以在创建视图时将要对用户保密码的列排除在外。
l
维护应用程序更方便。调试视图比调试查询更容易。跟踪视图中过程的各个步骤中的错误更为容易,这是因为所有的步骤都是视图的组成部分。
创建视图

 

复制代码 代码如下:

15.你可以用什么来确保表格里的字段只接受特定范围里的值?

这个问题可以用多种方式来回答,但是只有一个答案是“好”答案是Check限制,它在数据库表格里被定义,用来限制输入该列的值。

触发器也可以被用来限制数据库表格里的字段能够接受的值,但是这种办法要求触发器在表格里被定义,这可能会在某些情况下影响到性能。因此,微软建议使用Check限制而不是其他的方式来限制域的完整性。

 

4.1事务
² 开始事务:begin transaction
² 提交事务:commit transaction
² 回滚事务:rollback transaction
事务分类
² 显式事务:用begin transaction 明确指定事务的开始。
² 隐性事务:通过设置set implicit_transactions
on语句,将陷性事务模式设置为打开。当以隐性事务操作时,SQL
server将在提交或回滚事务后扑克动启动新事务。无法描述事务的开始,只需提交或回滚每个事务.
² 自动提交事务:这是SQL
server的默认模式,它将每条单独的T-SQL语句视为一个事务。如果成功执行,则自动提交。如果错误,则自动回滚。
示例:
Begin transaction–开始事务

 

四.事务,索引和视图.

4.什么是内存泄漏?

答:一般我们所说的内存泄漏指的是堆内存的泄漏。堆内存是程序从堆中为其分配的,大小任意的,使用完后要显示释放内存。当应用程序用关键字new等创建对象时,就从堆中为它分配一块内存,使用完后程序调用free或者delete释放该内存,否则就说该内存就不能被使用,我们就说该内存被泄漏了。

 

exec sp_grantlogin ‘jbtraining/s26301’
–windows用户为jbtraining/s26301,jbtraining 表示域
exec sp_addlogin ‘admin’,’0533131′–SQL登录帐户,帐户:
‘admin’,密码:0533131.

 

使用视图
Select * from myview
五.存储过程
5.1系统存储过程
常用系统存储过程
Sp_datadases 列出服务器上的所有数据库
Sp_helpdb 报告有关指定数据库或所有数据库的信息
Sp_renamedb 更改数据库的名称
Sp_tables 返回当前环境下可查询的对象的列表
Sp_columns 返回某个表列的信息
Sp_help 查看某个表的所有信息
Sq_helpconstraint 查看某个表的约束
Sq_helpindex 查看某个表的索引
Sq_stored_procedures 列出当前环境中的所有存储过程
Sp_password 添加或修改登录帐户的密码
Sp_helptext
显示默认值、未加密的存储过程、用户定义的存储过程、触发器或视图的实际文本
5.2自定义存储过程
Ø 不带参存储过程
Ø 带输入参数的存储过程
Ø 带输出参数的存储过程

If exists (select name from sysindexes where name=’myindex’)
Drop index 表名.myindex
Create nonclustered index myindex
on
student(id) with fillfactor=30
go

1.2建表.

变量

含义

@@error

最后一个T-SQL错误的错误号

@@identity

最后一次插入的标识值

@@language

当前使用的语言名称

@@max_connections

可以创建同时连接的最大数目

@@rowcount

受上一个SQL语句影响的行数

@@servername

本地服务器的名称

@@servicename

该计算机上的SQL服务的名称

@@timeticks

当前计算机上每刻度的微秒数

@@transcount

当前连接打开的事务数

@@version

SQL server的版本信息

1.4.3向数据库用户授权.

Create trigger trigger_name
On tablae_name
[with encryption]
For(insert,update,delete)
As
SQL 语句
Go

复制代码 代码如下: