mssql的T-SQL教程(从建登陆到建库、表和约束)

  本文引用自:http://www.cnblogs.com/seerlin/archive/2009/02/05/1384901.html

 1 
  2--1,创建登录,可以有两种方式:
  3--(1)以SQL验证的方式新建一个新的登录:
  4    exec sp_addlogin 'allnen','all123'--创建登录,登录名和密码
  5
  6--(2)以windows验证的方式将windows中的某个用户授予登录数据库服务的权限:
  7    exec sp_grantlogin 'PC-200901051757\allnen'
  8--或者
  9    --create login [PC-200901051757\allnen] from windows
 10
 11--如果要删除某个登录,可以用如下方式:
 12    --drop login [PC-200901051757\allnen] 
 13
 14--2,现在就可以用allnen这个帐号登录,但这里先不要登录,我们先给这个帐号授予创建数据库和表的权限
 15
 16    exec sp_grantdbaccess @loginame='allnen',@name_in_db='allnenDbUser'--将登录名映射到当前数据库
 17
 18    --exec sp_revokedbaccess 'allnen'--从当前数据库中删除对应的登录用户映射,也就是去除某个用户访问此数据库的权限
 19
 20    grant create database,create table to allnen--授予当前用户创建数据库的权限
 21--如果要去除某个用户的权限,用revoke,如果要拒绝某个用户的相关权限,用deny,revoke和deny的区别,请查阅其他相关文章
 22    --deny create database to allnenDbUser
 23
 24--3,现在就可以用allnen这个帐号登录,然后创建数据库和表了
 25--有时候如果要创建的数据库已经存在 ,那创建数据库的时候就会出错,
 26--所以我们一般在创建数据库前都会先判断要创建的数据库是否已经存在,
 27--如果存在,就先将存在的数据库删除
 28    IF EXISTS(SELECT * FROM sysdatabases WHERE name='stuDB')
 29        drop database stuDB
 30    GO
 31--当然,也可以用db_id(数据库名)这个函数来判断
 32
 33--创建数据库的时候,有可能数据库文件已经存在,或者文件目录不存在等,所以,我们还要先在硬盘中创建对应的文件夹
 34
 35    exec sp_configure 'show advanced options'1--显示高级选项,然后才可以配置xp_cmdshell
 36    reconfigure--从新应用配置,让配置生效
 37    exec sp_configure 'xp_cmdshell',1--启用xp_cmdshell功能
 38    reconfigure
 39    exec xp_cmdshell 'mkdir D:\project\'--用xp_cmdshell创建目录
 40    GO
 41--开始创建数据库
 42    CREATE DATABASE stuDB
 43       ON  PRIMARY  --默认就属于PRIMARY主文件组,可省略
 44    (
 45     NAME='stuDB_data',  --主数据文件的逻辑名
 46     FILENAME='D:\project\stuDB_data.mdf',  --主数据文件的物理名
 47     SIZE=5mb,  --主数据文件初始大小
 48     MAXSIZE=100mb,  --主数据文件增长的最大值
 49     FILEGROWTH=15%   --主数据文件的增长率
 50    )
 51    LOG ON
 52    (
 53      NAME='stuDB_log',
 54      FILENAME='D:\project\stuDB_log.ldf',
 55      SIZE=2mb,
 56      FILEGROWTH=1MB
 57    )
 58    GO 
 59--如果要创建多个数据库文件或者多个日志文件,则可以用这样的方式
 60    CREATE  DATABASE  employees
 61      ON 
 62       (
 63ExpandedBlockStart.gifContractedBlock.gif       /**//*-主数据文件的具体描述-*/
 64       NAME = 'employee1'
 65       FILENAME = 'D:\project\employee1_Data.mdf' , 
 66       SIZE = 10
 67       FILEGROWTH = 10%
 68      ), 
 69      (
 70ExpandedBlockStart.gifContractedBlock.gif       /**//*-次要数据文件的具体描述-*/
 71       NAME = 'employee2'
 72       FILENAME = 'D:\project\employee2_Data.ndf' , 
 73       SIZE = 20
 74       MAXSIZE = 100
 75       FILEGROWTH = 1
 76      ) 
 77     LOG ON 
 78      (
 79ExpandedBlockStart.gifContractedBlock.gif       /**//*-日志文件1的具体描述-*/
 80       NAME = 'employeelog1'
 81       FILENAME = 'D:\project\employeelog1_Log.ldf' , 
 82       SIZE = 10
 83       FILEGROWTH = 1
 84       ), 
 85      (
 86ExpandedBlockStart.gifContractedBlock.gif       /**//*-日志文件2的具体描述-*/
 87       NAME = 'employeelog2'
 88       FILENAME = 'D:\project\employeelog2_Log.ldf' , 
 89       SIZE = 10
 90       MAXSIZE = 50
 91       FILEGROWTH = 1
 92      )
 93    GO 
 94
 95
 96--
 97
 98--4,创建完数据库后,我们就可以开始创建表了
 99    USE stuDB   --将当前数据库设置为stuDB 
100    GO
101--同样,在创建表的时候,表也有可能已经存在,所以我们要先将已存在的表删除
102    IF EXISTS(SELECT * FROM sysobjects  WHERE name='stuInfo')
103        drop table stuInfo
104    GO
105ExpandedBlockStart.gifContractedBlock.gif    CREATE  TABLE  stuInfo    /**//*-创建学员信息表-*/
106    (
107     stuName  VARCHAR(20)  NOT  NULL ,  --姓名,非空(必填)
108     stuNo   CHAR(6)  NOT  NULL,   --学号,非空(必填)
109     stuAge  INT  NOT  NULL,  --年龄,INT类型默认为4个字节
110     stuID  NUMERIC(18,0),     --身份证号
111     stuSeat   SMALLINT  IDENTITY (1,1),   --座位号,自动编号
112     stuAddress   TEXT   --住址,允许为空,即可选输入
113    ) 
114    GO
115
116    IF EXISTS(SELECT * FROM sysobjects WHERE name='scoreInfo')
117        DROP TABLE scoreInfo
118    GO
119    CREATE TABLE scoreInfo
120    (
121        scoreInfoId int identity(1,1primary key,
122        score int,
123        stuNo CHAR(6)
124    )
125    GO
126
127--5,创建完表之后,要做的事情就算给表建立约束
128    alter table stuInfo
129        add constraint PK_stuNo primary key(stuNo)--主键约束
130    go
131    alter table stuInfo
132        add constraint UQ_stuID unique(stuID)--唯一约束
133    go
134    alter table stuInfo
135        add constraint DF_stuAddress default('地址不详'for stuAddress--默认约束
136    go
137    alter table stuInfo
138        add constraint CK_stuAge check(stuAge >20 and stuAge<40)--检查约束
139    go
140    alter table scoreInfo
141        add constraint FK_stuNo foreign key(stuNo) references stuInfo(stuNo) --外键约束
142    go
143       

 1 --1,用管理员登录
 2 --2,用管理员创建新数据库
 3 --3,用管理员创建新登录
 4 --4,授权新登录名访问新数据库的权限
 5 use master
 6 go
 7 exec sp_configure 'show advanced options',1
 8 reconfigure
 9 exec sp_configure 'xp_cmdshell',1
10 reconfigure
11 exec xp_cmdshell 'mkdir d:\Data\'
12 
13 
14 if exists(select * from sysdatabases where name='StuDb')
15 drop database StuDb
16 create database StuDb on primary 
17 (
18     name='StuDb',
19     filename='D:\Data\StuDb.mdf',
20     size=5MB,
21     filegrowth=15%
22 )
23 log on
24 (
25     name='StuDb_log',
26     filename='D:\Data\StuDb.ldf',
27     size=3MB,
28     maxsize=10MB,
29     filegrowth=10%
30 )
31 go
32 use StuDb
33 go
34 if exists(select *from sysobjects where name='StuInfo')
35     drop table StuInfo
36 go
37 create table StuInfo(
38     StuNo int identity(1,1),
39     StuName nvarchar(10)
40 )
41 go
42 if exists(select *from sysobjects where name='ScoreInfo')
43     drop table ScoreInfo
44 go
45 create table ScoreInfo(
46     ScoreInfoId int identity(1,1),
47     ExamScore float,
48     LabScore float,
49     StuNo int
50 )
51 --删除约束
52 alter table ScoreInfo
53     drop constraint CK_ExamScore,CK_LabScore
54 go
55 alter table ScoreInfo
56     alter column ExamScore numeric(5,2)
57 alter table ScoreInfo
58     alter column LabScore numeric(5,2)
59 go
60 --约束
61 alter table StuInfo
62     add constraint PK_StuNo primary key(StuNo)
63 alter table ScoreInfo
64     add constraint CK_ExamScore check(ExamScore>0 and ExamScore<100)
65 alter table ScoreInfo
66     add constraint CK_LabScore check(LabScore>0 and LabScore<100)
67 alter table ScoreInfo
68     add constraint FK_StuNo foreign key(StuNo) references StuInfo(StuNo)
69 go
70 
71 --授权windows用户访问数据库
72 
73     exec sp_grantlogin 'lab-04\administrator'--即将过期的方式
74     create login [lab-04\administrator] from windows----推荐方式
75 
76 drop login [lab-04\administrator]--删除登录
77 
78 create login t0811 with password='t0811'--创建新sql登录
79 
80 --创建新数据库用户,以前用sp_grantdbaccess,以后用
81 use StuDb
82 go
83 create user t0811InStuDb for login t0811
84 --授权访问表
85 grant select,delete,update,insert on StuInfo to t0811InStuDb
86 --取消权限
87 revoke delete on StuInfo to t0811InStuDb
88 --将t0811这个登录加入到sysadmin这个服务器级别角色中
89 --exec sp_addsrvrolemember 't0811','sysadmin'
90 
91 --将t0811InStuDb这个数据库用户加入到db_owner这个数据库级别角色中
92 exec sp_addrolemember 't0811InStuDb','db_owner'
93 --拒绝某个用户的某个权限
94 deny delete on StuInfo to t0811InStuDb
95 
96 
 

转载于:https://www.cnblogs.com/johnsmith/archive/2011/09/05/2167504.html

你可能感兴趣的:(mssql的T-SQL教程(从建登陆到建库、表和约束))