删除约束
如果错误地添加了约束,我们还可以删除约束
删除约束的语法
ALTER TABLE 表名
DROP CONSTRAINT 约束名
例如:删除stuInfo表中地址默认约束
ALTER TABLE stuInfo
DROP CONSTRAINT DF_stuAddress
登录验证有两种方式:
SQL身份验证:适合于非windows平台的用户或Internet用户, 需要提供帐户和密码
Windows身份验证:适合于windows平台用户,不需要提供密码,和windows集成验证
创建登录
添加 Windows登录帐户
EXEC sp_grantlogin ‘jbtraining\S26301‘ --域名\用户名
添加 SQL登录帐户
EXEC sp_addlogin ‘zhangsan', ‘1234’--用户名,密码
EXEC表示调用存储过程,
存储过程类似C语言的函数
内置的系统管理员 帐户sa
密码默认为空,建议修改密码
创建数据库用户
创建数据库用户需要调用系统存储过程sp_grantdbaccess,其用法为:
EXEC sp_grantdbaccess ‘登录帐户名’,’数据库用户名’
其中,“数据库用户“为可选参数,默认为登录帐户,
即数据库用户默认和登录帐户同名。
权限的类型
授权的语法为:
GRANT 权限 [ON 表名 ] TO 数据库用户
DECLARE @变量名 数据类型
逻辑控制语句
SQL中的IF-ELSE语句
IF (条件)
BEGIN
语句1
语句2
……
END
ELSE
BEGIN
语句1;
语句2;
……
END
逻辑控制语句
CASE-END多分支语句
CASE
WHEN 条件1 THEN 结果1
WHEN 条件2 THEN 结果2
……
ELSE 其他结果
END
事务必须具备以下四个属性,简称ACID 属性:
.原子性(Atomicity):事务是一个完整的操作。事务的各步操作是不可分的(原子的);要么都执行,要么都不执行
.一致性(Consistency):当事务完成时,数据必须处于一致状态
.隔离性(Isolation):对数据进行修改的所有并发事务是彼此隔离的,这表明事务必须是独立的,它不应以任何方式依赖于或影响其他事务
.永久性(Durability):事务完成后,它对数据库的修改被永久保持,事务日志能够保持事务的永久性
如何创建事务
T-SQL使用下列语句来管理事务:
开始事务:BEGIN TRANSACTION
提交事务:COMMIT TRANSACTION
回滚(撤销)事务:ROLLBACK TRANSACTION
一旦事务提交或回滚,则事务结束。
索引类型
唯一索引:唯一索引不允许两行具有相同的索引值
主键索引:为表定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型。主键索引要求主键中的每个值是唯一的,并且不能为空
聚集索引(Clustered):表中 各行的物理顺序与键值的逻辑(索引)顺序相同,每个表只能有一个
非聚集索引(Non-clustered):非聚集索引指定表的逻辑顺序。数据存储在一个位置,索引存储在另一个位置,索引中包含指向数据存储位置的指针。可以有多个,小于249个
如何创建索引
使用T-SQL语句创建索引的语法
唯一索引 聚集索引或非聚集索引
CREATE [UNIQUE] [CLUSTERED|NONCLUSTERED]
INDEX index_name
ON table_name (column_name…)
[WITH FILLFACTOR=x] --填充因子(系数):指定一个0~100之间的值,表示索引页填充的百分比
加快访问速度
加强行的唯一性
缺点
带索引的表在数据库中需要更多的存储空间
操纵数据的命令需要更长的处理时间,因为它们需要对索引进行更新
如何创建视图
使用T-SQL语句创建视图的语法
CREATE VIEW view_name
AS
<select语句>
示例:
--检测是否存在
IF EXISTS (SELECT * FROM sysobjects WHERE
name = 'view_stuInfo_stuMarks')
DROP VIEW view_stuInfo_stuMarks --删除视图
GO
CREATE VIEW view_stuInfo_stuMarks --创建视图
AS
SELECT 姓名=stuName,学号=stuInfo.stuNo,
笔试成绩 =writtenExam, 机试成绩=labExam,
平均分=(writtenExam+labExam)/2
FROM stuInfo LEFT JOIN stuMarks
ON stuInfo.stuNo=stuMarks.stuNo
GO
SELECT * FROM view_stuInfo_stuMarks --使用视图
如何创建自定义的存储过程
定义存储过程的语法
CREATE PROC[EDURE] 存储过程名
@参数1 数据类型 = 默认值 OUTPUT,
…… ,
@参数n 数据类型 = 默认值 OUTPUT
AS
SQL语句
GO
和C语言的函数一样,参数可选
参数分为输入参数、输出参数
输入参数允许有默认值
EXECUTE(执行)语句用来调用存储过程
调用的语法
EXEC 过程名 [参数]
存储过程的参数分两种:
输入参数
输出参数
输入参数:
用于向存储过程传入值,类似C语言的按值传递;
输出参数:
用于在调用存储过程后,
返回结果,类似C语言的
按引用传递;
如果希望调用存储过程后,返回一个或多个值,这时就需要使用输出(OUTPUT)参数了
处理存储过程中的错误
可以使用PRINT语句显示错误信息,但这 些信息是临时的,只能显示给用户
RAISERROR 显示用户定义的错误信息时
可指定严重级别,
设置系统变量@@ERROR
记录所发生的错误等
使用RAISERROR 语句
RAISERROR语句的用法如下:
RAISERROR (msg_id | msg_str,severity,
state WITH option[,...n]])
msg_id:在sysmessages系统表中指定用户定义错误信息
msg_str:用户定义的特定信息,最长255个字符
severity:定义严重性级别。用户可使用的级别为0–18级
state:表示错误的状态,1至127之间的值
option:指示是否将错误记录到服务器错误日志中
总结
存储过程是一组预编译的SQL语句,它可以包含数据操纵语句、变量、逻辑控制语句等
存储过程允许带参数,参数分为:
输入参数
输出参数
其中,输入参数可以有默认值。
输入参数:可以在调用时向存储过程传递参数,此类参数可用来向存储过程中传入值
输出参数从存储过程中返回(输出)值,后面跟随OUTPUT关键字
RAISERROR语句用来向用户报告错误
什么是触发器
触发器是在对表进行插入、更新或删除操作时自动执行的存储过程
触发器通常用于强制业务规则
触发器是一种高级约束,可以定义比用CHECK 约束更为复杂的约束
可执行复杂的SQL语句(if/while/case)
可引用其它表中的列
触发器定义在特定的表上,与表相关
自动触发执行
不能直接调用
是一个事务(可回滚)
触发器的类型
DELETE 触发器
INSERT 触发器
UPDATE 触发器
inserted 和deleted 表
触发器触发时:
系统自动在内存中创建deleted表或inserted表
只读,不允许修改;触发器执行完成后,自动删除
inserted 表
临时保存了插入或更新后的记录行
可以从inserted表中检查插入的数据是否满足业务需求
如果不满足,则向用户报告错误消息,并回滚插入操作
deleted 表
临时保存了删除或更新前的记录行
可以从deleted表中检查被删除的数据是否满足业务需求
如果不满足,则向用户报告错误消息,并回滚插入操作
inserted表和deleted表存放的信息
修改操作 inserted表 deleted表
增加(INSERT)记录 存放新增的记录 ------
删除(DELETE)记录 ----- 存放被删除的记录
修改(UPDATE)记录 存放更新后的记录 存放更新前的记录
如何创建触发器
创建触发器的语法:
CREATE TRIGGER trigger_name
ON table_name
[WITH ENCRYPTION]
FOR [DELETE, INSERT, UPDATE]
触发器是在对表进行插入、更新或删除操作时自动执行的存储过程,触发器通常用于强制业务规则
触发器还是一个特殊的事务单元,当出现错误时,可以执行ROLLBACK TRANSACTION回滚撤销操作
触发器一般都需要使用临时表:deleted表和inserted表,它们存放了被删除或插入的记录行副本
触发器类型:
INSERT触发器
UPDATE触发器
DELETE触发器
AS
T-SQL语句
GO