SQl Server2

删除约束

如果错误地添加了约束,我们还可以删除约束
删除约束的语法
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

你可能感兴趣的:(sql,数据库,windows,server,delete,存储,insert)