SQL SERVER设计与高级查询

第二章  数据库实现

【基础回顾】

数据库文件的组成:  主文件  次要文件  日志文件 *.ldf

(当主文件存满后,数据将存入次要文件)

 

SQLServer三层安全模型:

1.     需要登陆到SQLServer系统,即需要登陆帐户

2.     需要访问某个数据库,即需要成为该数据库的用户

3.     需要访问数据库中的表,需要受权操作

 

【创建/删除数据库】

判断数据库是否已经存在,数据库清单存放在master数据库sysdatabases表中

 

use master 
   
--判断数据库是否存在,如果存在则删除数据库 
    
if exists (select * from sysdatabases where name = 'exam') 
   
drop database exam 
   
 
   
       
   
--创建数据库 
    
create database exam 
   
on 
   
( 
   
/*-数据文件具体描述-*/ 
    
name = 'exam',  --主数据文件逻辑名称 
    
filename = 'd:/exam.mdf',  --主数据文件的物理名称 
    
size = 5mb, --主数据文件初始大小 
    
maxsize = 100mb,  --主数据文件增长最大值 
    
filegrowth = 10%  --主数据文件增长率,当指定数据为0时,表示文件不增长 
    
) 
   
log on 
   
( 
   
/*-日志文件具体描述-*/ 
    
name = 'exam_log', 
   
filename = 'd:/exam.ldf', 
   
size  = 3mb, 
   
filegrowth = 1% 
   
) 
   
go 
   
 
   
       
   
【问题】 
    
delete与drop的区别:delete删除的是数据,drop删除表,数据库 
    
 
   
       
   
【创建/删除表】 
    
SQL中常见数据类型: 
    
Int float numeic char varchar nchar nvarchar 等 
    
判断表是否已经存在,表清单存放在数据库系统表sysobjects中 
    
 
   
       
   
use exam 
   
--判断表是否存在,如果存在则先删除表 
    
if exists(select * from sysobjects where name = 'username') 
   
drop table username 
   
 
   
       
   
--创建用户表 
    
create table username 
   
( 
   
--格式 列名 数据类型 列特征 
    
id int identity(1,1), --标识列自增长,从开始递增 
    
uName varchar(10) not null, --用户名不能为空 
    
uAge int not null, --年龄 
    
uSex int not null, --性别 
    
uDept  int not null, --部门 
    
userID numeric(18,0), --身份证号(18,0)表示位数,小数点后有0位 
    
uAdd text  --用户地址允许为空 
    
) 
   
 
   
       
   
 
   
       
   
【问题】 
    
数据类型 char varchar nchar nvarchar 的区别: 
    
char 长度固定, varchar 长度是可调节长度 
    
例如: 
    
一个char 数据类型‘sql语言   ’(注意空格),它的长度会要将空格计算在内. Len= 10 
    
varchar 数据类型 ‘sql语言   ’它将自动删除空格部分.len= 7 
    
nchar nvarchar 是Unicode字符型数据,用双字节结构存储每个字符.(字符串长度与字节长度不相等) 
    
 
   
       
   
【创建/删除表约束】 
    
--创建约束语法 
    
alter table tableName 
   
add constraint constraintName constraintType Explain 
   
--删除约束语法 
    
alter table tabelName 
   
drop constraint constraintName 
   
 
   
       
   
--约束类型 
    
primary key  --主键约束 
    
unique      --唯一约束 
    
default      --默认约束 
    
check       --检查约束 
    
foreign key  --外键约束 
    
 
   
       
   
例句: 
    
--创建主键约束 
    
alter table username 
   
add constraint PK_id primary key (id) 
   
--创建唯一约束 
    
alter table username 
   
add constraint UQ_userID unique (userID) 
   
--创建默认约束,默认为'地址不详' 
    
alter table username 
   
add constraint DF_uAdd default ('地址不详') for uAdd 
    
--创建检查约束,年龄只能在-40之间 
    
alter table username 
   
add constraint CK_uAge check (uAge between 15 and 40) 
   
--创建外键约束,主表username与从表dept建立关系 
    
alter table dept 
   
add constraint FK_dept 
   
foreign key (dept) references username(udept) 
   
go 
   
 
   
       
   
--删除约束 
    
alter table username 
   
drop constraint PK_id 
   
 
   
       
   
【问题】 
    
在CK_username这个约束中, 
    
alter table username 
   
add constraint CK_uAge check (uAge between 15 and 40) 
   
between 指定的范围是开区间还是闭区间: 闭区间 
    
 
   
       
   
【创建登陆】 
    
1.创建登陆帐户 
    
/*-windows账户调用Server内置系统存储过程sp_grantLogin-*/ 
    
exec sp_grantLogin 'windows域名/域账户' 
    
 
   
       
   
/*-Sql账户调用系统存储过程sp_addLogin-*/ 
    
exec sp_addLogin '账户名','密码' 
    
 
   
       
   
2.创建数据库用户 
    
/*-调用系统存储过程sp_grantdbaccess-*/
--当前数据库 
    
exec sp_grantdbaccess '登陆账户','数据库用户名' 
    
 
   
       
   
3.给数据库用户授权
语法:grant popedom no TableName to SqlUserName 
   
常用权限包括:insert,select,update,delete,create Table等操作