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等操作