zoukankan      html  css  js  c++  java
  • mssql的TSQL教程(从建登陆到建库、表和约束)

      本文引用自: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       (
     63       /*-主数据文件的具体描述-*/
     64       NAME = 'employee1'
     65       FILENAME = 'D:\project\employee1_Data.mdf' , 
     66       SIZE = 10
     67       FILEGROWTH = 10%
     68      ), 
     69      (
     70       /*-次要数据文件的具体描述-*/
     71       NAME = 'employee2'
     72       FILENAME = 'D:\project\employee2_Data.ndf' , 
     73       SIZE = 20
     74       MAXSIZE = 100
     75       FILEGROWTH = 1
     76      ) 
     77     LOG ON 
     78      (
     79       /*-日志文件1的具体描述-*/
     80       NAME = 'employeelog1'
     81       FILENAME = 'D:\project\employeelog1_Log.ldf' , 
     82       SIZE = 10
     83       FILEGROWTH = 1
     84       ), 
     85      (
     86       /*-日志文件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
    105    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 
     

  • 相关阅读:
    ElementUI 之 Message,自动弹出,信息不显示问题
    eslint 对下一行不要校验报错
    <input type="file"> accept属性筛选文件类型
    纯 css 控制隔行变色
    本地启动服务,两个进程分别监听两个端口,导致两个 URL 不同
    tap 事件会触发两次问题
    时间宝贵-----
    有些人,得到和失去,你都会后悔!
    前调清新,中调醇厚,后调悠长。
    office 格式定义
  • 原文地址:https://www.cnblogs.com/johnsmith/p/2167504.html
Copyright © 2011-2022 走看看