‘壹’ 12. 索引,游标,约束,存储过程,触发器的定义,用途和语法
1.索引是数据库常用的一种方法,它的基本原理就是按照某一指定关键字段进行排序后,生成一个索引文件,以便于查找定位,提高搜索速度。
主要用途是的高系统的性能,大大加快数据检索的速度。
索引分为三类:聚集索引(CLUSTERED)和非聚集索引(NONCLUSTERED)。
语法:
CREATE [UNIQUE] [CLUSTERED | NONCLUSTERED] INDEX 索引名
ON {表名 | 视图名} (列名[ASC|DESC] [,...n])
[WITH
[[,]FILLFACTOR=填充因子]
[[,]IGNORE_DUP_KEY]
[[,]DROP_EXISTING]
[[,]STATISTICS_NORECOMPUTE]
[[,]SORT_IN_TEMPDB]]
[ON filegroup]
2.游标的详细说明你看下面的网页吧:
http://www.yesky.com/imagesnew/software/tsql/ts_set-set_0vs5.htm
3.约束的话我只写出其类型来吧,相信你应该懂的。
类型:1.NOT NULL指定不接受NULL值的列。
2.CHECK约束对可以放入列中的值进行限制,以强制执行域的完整性。
3.UNIQUE约束在列集内强制执行值的唯一性。
4.PRIMARY KEY约束标识列或列集,这些列或列集的值唯一标识表中的行
5.FOREIGN KEY约束标识表之间的关系
6.DEFAULT约束为列填入的默认值
4.存储过程是一种数据库对象,是为了实现某个特定任务,将一组预编译的SQL语句以一个存储单元的形式存储在服务器上,供用户调用。
创建存储过程语法:
CREATE PROC [EDURE] procere_name [;number]
[{@parameter data_type}
[VARYING] [=default] [OUTPUT]
][,...n]
[WITH
{RECOMPLE | ENCRYPTION | RECOMPLE,ENCRYPTION}]
[FOR REPLICATION]
as sql_statement [,...n]
执行存储过程语法:
[[EXEC [UTE]]
{[@return_status=]
{procre_name [;number] | @procre_name_var}
[[@parameter=] {value | @variable [OUTPUT] | [DEFAULT]}
[,...n]
[WITH RECOMPLE]
5.触发器是一种特殊类型的存储过程,也是由T_SQL语句组成,可以完成存储过程能完成的功能,但它与表紧密相连,可以看做表定义的一部分;它不可能通过名称被直接调用,更不允许参数,而是当用户对表中的数据进行修改时,自动执行;它可以用于SQL Server约束、默认值和规则的完整性检查、实施更为复杂的数据完整性约束。
创建触发器的语法:
CREATE TRIGGER trigger_name
ON {table | view}
[WITH ENCRYPTION]
{
{{FOR | AFTER | INSTEAD OF} {[INSERT] [,] [DELETE] [,] [UPDATE]}
[NOT FOR REPLICATION]
AS
[{IF UPDATE (column)
[{AND | OR} UPDATE (column)]
[,...n]
| IF(COLUMNS_UPDATED() {bitwise_operator} updated_bitmask)
(comparison_operator) column_bitmask [,...n]
}]
sql_statement [,...n]
}
}
如果觉得我回答的还可以,那可不可以帮我加分。(*^__^*) 嘻嘻……
‘贰’ 存储过程的参数类型哪几种
存储过程共有IN、OUT、INOUT三种参数类型,格式如下:CREATEPROCEDURE(IN|OUT|INOUT参数名数据类型...)存储过程可以没有参数,但如果在使用过程需要用到参数,需按上面的格式进行定义。
第一项:IN|OUT|INOUT,表示参数的类型,选择其中的一种即可;第二项:参数名,表示参数的名称;第三项:数据类型,表示这个参数的数据类型,如int、float、double、varcahr等;第四项:“…”,表示参数可以定义多个,如果有多个参数时按前三项的格式定义即可,每个参数间用英文状态下的逗号“
‘叁’ 存储过程禁止空参数
默认情况下,参数可为空。如果传递 NULL 参数值并且该参数语句中使用,而该语句中引用的列又不允许使用 NULL,则 SQL Server 会产生一条错误信息。为了防止向不允许使用 NULL 的列传递 NULL 参数值,应向过程中添加编程逻辑或为该列使用默认值(使用 的 DEFAULT 关键字)。
‘肆’ 存储过程写法
CREATE PROCEDURE [拥有者.]存储过程名[;程序编号]
[(参数#1,…参数#1024)]
[WITH
{RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION}
]
[FOR REPLICATION]
AS 程序行
其中存储过程名不能超过128个字。每个存储过程中最多设定1024个参数
(SQL Server 7.0以上版本),参数的使用方法如下:
@参数名数据类型[VARYING] [=内定值] [OUTPUT]
(4)存储过程参数约束扩展阅读:
存储过程相关的其他数据库原理术语:触发器
触发器可以查询其他表,而且可以包含复杂的SQL语句。它们主要用于强制服从复杂的业务规则或要求。例如:您可以根据客户当前的帐户状态,控制是否允许插入新订单。
触发器也可用于强制引用完整性,以便在多个表中添加、更新或删除行时,保留在这些表之间所定义的关系。然而,强制引用完整性的最好方法是在相关表中定义主键和外键约束。如果使用数据库关系图,则可以在表之间创建关系以自动创建外键约束。
‘伍’ SQL server中,存储过程基础和表达式怎么写,然后约束怎么理解
什么是存储过程呢?
存储过程就是作为可执行对象存放在数据库中的一个或多个SQL命令。
通俗来讲:存储过程其实就是能完成一定操作的一组SQL语句。
那为什么要用存储过程呢?
1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
2.当对数据库进行复杂操作时,可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。
3.存储过程可以重复使用,可减少数据库开发人员的工作量。
4.安全性高,可设定只有某些用户才具有对指定存储过程的使用权
那存储过程怎么用呢?
以下通过表Student 来了解存储过程,因为是要了解存储过程的简单用法,所以所有例子均很简单。
无参数存储过程:
选出Student表中的所有信息,
create proc StuProc
as //此处 as 不可以省略不写
begin //begin 和 end 是一对,不可以只写其中一个,但可以都不写
select S#,Sname,Sage,Ssex from student
end
go
有参数存储过程:
全局变量
全局变量也称为外部变量,是在函数的外部定义的,它的作用域为从变量定义处开始,到本程序文件的末尾。
选出指定姓名的学生信息:
create proc StuProc
@sname varchar(100)
as
begin
select S#,Sname,Sage,Ssex from student where sname=@sname
end
go
exec StuProc '赵雷' //执行语句
上面是在外部给变量赋值,也可以在内部直接给变量设置默认值
create proc StuProc
@sname varchar(100)='赵雷'
as
begin
select S#,Sname,Sage,Ssex from student where sname=@sname
end
go
exec StuProc
也可以把变量的内容输出,使用output
create proc StuProc
@sname varchar(100),
@IsRight int output //传出参数
as
if exists (select S#,Sname,Sage,Ssex from student where sname=@sname)
set @IsRight =1
else
set @IsRight=0
go
declare @IsRight int
exec StuProc '赵雷' , @IsRight output
select @IsRight
以上是全局变量,下面来了解局部变量
局部变量也称为内部变量。局部变量是在函数内作定义说明的。其作用域仅限于函数内部,离开该函数后再使用这种变量是非法的。
局部变量的定义:必须先用Declare命令定以后才可以使用,declare{@变量名 数据类型}
局部变量的赋值方法:set{@变量名=表达式}或者select{@变量名=表达式}
局部变量的显示:select @变量名
create proc StuProc
as
declare @sname varchar(100)
set @sname='赵雷'
select S#,Sname,Sage,Ssex from student where sname=@sname
go
exec StuProc
那如果是要把局部变量的数据显示出来怎么办呢?
create proc StuProc
as
declare @sname varchar(100)
set @sname=(select Sname from student where S#=01)
select @sname
go
exec StuProc
‘陆’ 如何创建带参数的存储过程
创建带参数的存储过程首先要在存储过程中声明该参数,每个存储过程参数都必须用唯一的名称进行定义。与T-SQL变量相同,参数名必须以@为前缀,并且遵从标识符规则。当用户不提供该参数的值时可以使用一个默认值来代替。
‘柒’ 存储过程中定义参数的意义是什么
存储过程其实就是一个功能,定义参数就是为了这个调用者使用他所要的结果
举个简单例子:
手机是存储过程(不变)
手机号码卡是参数(可变)
换不同的号码使用手机,功能可能不一样,这个号码是张三使用,那个号码是李四使用。
这就是存储过程中定义参数的意义。
‘捌’ 存储过程允许带参数,参数分为哪两种
参数分为入参和出参(in 和 out)
create or replace procere p_test ( tx_Date in varchar2 , ret_code out number )
as
begin
……
end;
‘玖’ SQL中存储过程是干什么用的
存储过程是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。
数据库存储过程的实质就是部署在数据库端的一组定义代码以及SQL。将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来,那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execute,即可自动完成命令。
每个参数名前要有一个“@”符号,每一个存储过程的参数仅为该程序内部使用,参数的类型除了IMAGE外,其他SQL Server所支持的数据类型都可使用。
(9)存储过程参数约束扩展阅读:
SQL中存储过程优点:
1、重复使用。存储过程可以重复使用,从而可以减少数据库开发人员的工作量。
2、减少网络流量。存储过程位于服务器上,调用的时候只需要传递存储过程的名称以及参数就可以了,因此降低了网络传输的数据量。
3、安全性。参数化的存储过程可以防止SQL注入式攻击,而且可以将Grant、Deny以及Revoke权限应用于存储过程。
4、存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。