SQL server Base II

继整理c++方面资料后,blog好久都没有更新了,最近准备抽空把关于DotNET的学习记录整理上传。此篇为SQL Server方面的最基本常用资料第2篇。

如果觉得文章内容对您有用欢迎任意转载。但请注明出处http://www.cnblogs.com/nniixl/

THE5

数据库的设计

一.需求分析阶段

 

1.       收集对象

2.       标识对象

3.       标识每个对象的属性

4.       标识对象之间的关系

 

二.详细设计阶段

 

1.       绘制E – R

2.       E – R图转换为表格

3.       应用三大范式规范表格

1st NF每列原子性

2st NF: 除主键外的其他列都依赖于该主键   - - 都和主键相关

3st NF: 除主键外的其他列都不传递依赖于该主键  - - 都直接相关 无间接

 

访问SQL表需要验证

是否SQL  SERVER帐户

是否是该数据库帐户

是否有足够的权限操作访问该表

 

创建登录

添加windows登录帐户

EXEC  sp_grantlogin  ‘域名\用户名

 

添加SQL登录帐户

EXEC  sp_addlogin  ‘用户名’, ‘密码

 

创建数据库用户

EXEC  sp_grantdbaccess  ‘登录帐户名’, ‘数据库用户名’  

注:数据库用户名为默认数据,同用户名一致

 

权限类型

GRANT

在安全系统中创建项目,使当前数据库中的用户得以处理当前数据库中的数据或执行特定的 Transact-SQL 语句。

1 例子:授予语句权限

下面的示例给用户 Mary John 授予多个语句权限。

GRANT CREATE DATABASE, CREATE TABLE TO Mary, John

授予全部语句权限给用户Rose

GRANT ALL to Rose

2 例子:授予对象权限

GRANT SELECT ON authors TO public

GRANT INSERT, UPDATE, DELETE ON authors TO Mary, John, Tom

 

DENY

在安全系统中创建一项,以拒绝给当前数据库内的安全帐户授予权限并防止安全帐户通过其组或角色成员资格继承权限。

1 例子:拒绝语句权限

下例对多个用户拒绝多个语句权限。用户不能使用 CREATE DATABASE CREATE TABLE 语句

DENY CREATE DATABASE, CREATE TABLE TO Mary, John

对用户Rose拒绝全部语句权限

DENY ALL to Rose

2 例子:拒绝对象权限

DENY INSERT, UPDATE, DELETE ON authors TO Mary, John, Tom

 

REVOKE

删除以前在当前数据库内的用户上授予或拒绝的权限。

1 废除类似于拒绝,但是,废除权限是删除已授予的权限,并不妨碍用户、组或角色从更高级别继承已授予的权限。因此,如果废除用户查看表的权限,不一定能防止用户查看该表,因为已将查看该表的权限授予了用户所属的角色。

2 角色是权限的一个集合,可以指派给用户或其它角色。这样只对角色进行权限设置便可以实现对多个用户权限的设置

3 举例:DENYREVOKE区别

例如,从 HumanResources 角色中删除 Employees 表上的 SELECT 访问权限将废除该权限,从而使 HumanResources 不能再使用该表。如果 HumanResources Administration 角色的成员。如果以后将 Employees 上的 SELECT 权限授予了 Administration,则 HumanResources 的成员可以通过 Administration 中的成员资格看到该表。但是,如果对 HumanResources 拒绝SELECT权限,则即使以后向 Administration 授予权限,HumanResources 也不会继承该权限

4 例子: 废除授予用户帐户的语句权限

下例废除已授予用户 Joe CREATE TABLE 权限。它删除了允许 Joe 创建表的权限。不过,如果已将 CREATE TABLE 权限授予给了包含 Joe 的任何角色,那么 Joe 仍可创建表。

REVOKE CREATE TABLE FROM Joe

例子: 废除授予多个用户帐户的多个权限

下例废除授予多个用户的多个语句权限。

REVOKE CREATE TABLE, CREATE INDEX FROM Mary, John

例子: 废除拒绝的权限

用户 Mary Budget 角色的成员,已给该角色授予了对 Budget_Data 表的 SELECT 权限。已对 Mary 使用 DENY 语句以防止 Mary 通过授予 Budget 角色的权限访问 Budget_Data

下例删除对 Mary 拒绝的权限,并通过适用于 Budget 角色的 SELECT 权限,允许 Mary 对该表使用 SELECT 语句。

REVOKE SELECT ON Budget_Data TO Mary

 

THE6

使用变量

局部变量

         局部变量以标记@为前缀

         局部变量为先声明再赋值

EXP

DECLARE  @name  varchar(8)

SET  @name = ‘edward’

全局变量

         全局变量必须以标记@@为前缀

         全局变量由系统定义和维护,我们只能读取,不能修改全局变量的值

EXP:

PRINT  '当前SQL版本: ' + @@VERSION

 

逻辑控制语句

IF – ELSE语句

 

IF (条件)

   BEGIN

     语句1

     语句2

     … …

END

ELSE

   BEGIN

     语句1

     语句2

     … …

END

 

 

WHILE语句

 

WHILE (条件)

         BEGIN

       语句1

       语句2

       … …

BREAK

END

 

 

CASE语句

 

CASE

WHEN  条件1  THEN  结果1

WHEN  条件2  THEN  结果2

… …

ELSE  其他结果

END

 

THE7

子查询  EXISTS  NOT EXISTS 联接等语句的同功能替换

EXP

SELECT  *  FROM  stuInfo 

WHERE  EXISTSSELECT  *  FROM  stuMarks  WHERE  stuNo = stuInfo.stuNo

 

使用IN子查询改写上述语句

SELECT * FROM stuInfo  

WHERE  stuNo  IN  (SELECT  stuNo  FROM  stuMarks)

 

请使用连接改写上述语句

SELECT  *  FROM  stuInfo 

INNER   JOIN   stuMarks  ON  stuInfo.stuNo = stuMarks.stuNo

 

事物

开始事物

BEGIN  TRANSACTION

 

执行事物

COMMIT  TRANSACTION

 

回滚事物

ROLLBACK  TRANSACTION

 

判断条件语句是否执行有错误

全局变量@@ERROR

@@ERROR只能判断前一条T-SQL语句的执行是否出错,为了判断事物中语句是否有错,需要使用自定义变量累加方法:

DECLARE  @errorSum  INT

SET @errorSum  =  @errorSum  +  @@ERROR

 

索引

CREATE  [UNIQUE] [CLUSTERED | UNCLUSTERED]    - -唯一索引   聚集索引   非聚集索引

  INDEX  index_name

  ON  table_name(columu_name)

[WITH  FILLFACTOR= X]  - -填充因子 0  -   100

 

EXP

索引的创建

 IF  EXISTSSELECT  name  FROM  sysindexes

WHERE   name = 引名)

DROP  INDEX  表名索引名

GO

 

CREATE ...

 

视图

CREATE  VIEW  view_name

AS 

<select语句>

 

EXP:

IF  EXISTS  (SELECT  *  FROM  sysobjects  WHERE

            Name = ‘视图名’)

DROP  VIEW  视图名

GO

 

CREATE …

 

 

 

posted @ 2008-09-27 16:18  Edward Xie  阅读(355)  评论(0编辑  收藏  举报