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 举例:DENY与REVOKE区别
例如,从
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
5 例子: 废除授予多个用户帐户的多个权限
下例废除授予多个用户的多个语句权限。
REVOKE
CREATE TABLE, CREATE INDEX FROM Mary, John
6 例子: 废除拒绝的权限
用户
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 EXISTS(SELECT * 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 EXISTS(SELECT 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 …