注册 | 登录 忘记密码? 51cto首页 | 博客 | 论坛 | 招聘
热点文章 顺便给51cto做个广告
 帮助

规范SQL SERVER 数据


2008-06-20 08:35:42
 标签:SQL   [推送到技术圈]

版权声明:原创作品,谢绝转载!否则将追究法律责任。
第一题:要求在yuangong表上增加一列为录入员,并将该字段设为默认约束,值为:张红.请用SQL语句写出从创建默认约束到删除的一系列过程.
具体操作步骤如下:
1.  首先自己创建一个表,也可以找一个以建好的表。修改原表,加入录入员这一列如下图所示:
 
 
2.  在现有表上,增加一个默认值约束。如下图所示:
 
 
注:这个默认值约束对,原表中已存在的记录,是不起作用的。只用在创建约束后,加的记录才有效。
 
3.  在这个表中加入啊信,这条记录。如下图所示:
 
 
 
4.  删除默认值约束。如下图所示:
下面是先查看约束。找出创建的默认约束(DK_RRY
 
下面是删除默认约束。如下图所示:
 
 
 
 
 
在表中重新加一条新记录,如下图所示:
 
 
查看结果,录入员为空。如下图所示:
 
完成第一题的操作。
 
 
第二题:现在你们公司在北京设置了一个专卖店,这个专场店只能针对北京五大区的用户进行销售。也就是说填写客户资料时,客户所在地只能是海淀区,朝阳区,通州区、崇文区、顺义区,并且客户邮编必须正确(全部是数字),每一条记录都会有一个录入日期字段,取当取日期,请自拟建表实现,使用SQL语句写出实现过程。
具体操作步骤如下:
1.  首先创建一个表,如ZMD。在建表的同时创建一具CHECK约束。如下图所示:
(1)       这是给地址创建了一具CHECK约束:
(2)       通过INSERT INTO 表名 VALUES (),向表中插入记录。
 
 
2.给时间设置一个默认值约束。如一图所示:
 
 
3.  测试(地址中的默认值约束)如下图所示:
 
 
 
 
3.  从上图中可以看出,邮编是字母的也可以插入。下面是给邮编创建一具CHECK约束。
注:在创建CHECK约束前,必须先把前面的含有字母的邮编删掉。
才能创建新的CHECK约束。
如下图所示:
 
 
5.创建CHECK约束。如下图所示:
 
 
6.加入一条新的记录进行测试。如下图所示:
 
 
 
 
完成第二题的操作。
 
 
 
第三题:.创建用于存储收货人资料的recipient表。下面是要存储到表中的收货人资料
 
1--创建表
create table Recipient
(   OrderNo       char(6) not null,  
    userName    varchar(20)not null,                
         Address varchar(20) null,
         City      char(15) null, 
         CountryId     char(3) null,      国家
         ZipCode char(10) null,  邮编
         Phone           char(15) null  电话
)
        
2.考虑上面的表结构,就以下问题参考这些表结构:
a.)创建Category(种类)表。在创建表时实施下面的数据完整性规则:
      CategoryID属性应作为主健
      Category属性应为唯一,但不是主健
      Description的描述可存储NULL
 
b.)创建ToyBrand(商标)表。在创建表时实施下面的数据完整性规则:
BrandID属性应作为主健
BrandName属性应为唯一,但不是主健
 
c.)创建Toys表。在创建表时实施下面的数据完整性规则:
      ToysID属性应作为主健
      ToyNameToyDescription属性不可取NULL
      玩具的siToyQoh现有数量应在0200之间
      玩具的最低年龄LowerAge缺省为1
      CategoryId属性的值应出现在Category表中
 
d.)修改Toys表。实施下面的数据完整性规则:
      BrandID属性的值应出现在ToyBrand表中
 
 
 
下面是具体操作步骤:
1.  创建收货人资料的recipient表。如下图所示:
 
 
 
2.  创建种类表。如下图所示:
 
 
3.  创建商标表。如下图所示:
 
 
4.  创建玩具表。如下图所示:
 
 
解析:a. 玩具的siToyQoh现有数量应在0200之间.(运用了CHECK约束)
      b. 玩具的最低年龄LowerAge缺省为1(运用了CHECK约束)
      c. CategoryId属性的值应出现在Category表中(运用了外键约束)
      d. 修改Toys表时,BrandID属性的值应出现在ToyBrand表中(运用了外键约束)
小结:(1)在一个表中操作常用,CHECK约束和默认值约束。
2)多表操作则,常用外键约束和触发器。
完成第三题的操作。
 
 
 
第四题:现有两个表学生表和学生借书记录表
结构如下:
  Create Table Student(             --学生表
       StudentID int primary key      --学号
       studentname varchar(10)       -- 学生姓名
      )
     Create Table BorrowRecord(              --学生借书记录表
       BorrowRecord  int identity(1,1),      --流水号 
       StudentID     int ,                   --学号   
       BorrowDate    datetime,               --借出时间
       ReturnDAte    Datetime,               --归还时间  )
要求使用触发器实现以下功能
 
A 如果更改了学生的学号,希望他的借书记录仍然与这个学生相关(也就是同时更改借书记录表的学号);
B    如果该学生已经毕业,希望删除他的学号的同时,也删除它的借书记录。
 
下面是具体操作步骤:
1.  首先创建两个基表。一个是学生表。一个是学生借书记录表。如下图所示:
 
 
2.  在现有表中,创建一个外键约束。如下图所示:
 
3.  测试。如下图所示:
1)加入一条新的记录。
 
 
(2)       删除一条记录。如下图所示:
 
 
 
完成第四题的操作。
 
第五题:5. 要求:建立2个表:(cust_testorder_test)
cust_test:
 CustomerID char(5) PK             
 Custcity        所在城市                     
 Custname        产品名称                      
 CStatus    int  库存状态                      
 Cstorage   int  库存量                       
 Cdate      date 日期 
 
order_test:
 CustomerID char(5)--对应关系
Orderid    PK  订单序号
OrderNames   订购的产品名称
OStatus    int  --状态
Orders     int   --定购
Odate      date--日期                       
 
(1) cust_test表中建立删除触发器,实现上述2表的级联删除。
从库存表中删除一个产品,相应的订单也会删除
(2) order_test表上建立一个插入触发器,在添加一个订单时,减少cust_test表的相应货物的记录的库存量。
(3) order_test表上建立一个更新触发器,规定订单日期(Odate)不能修改。
(4) 要求订购的物品一定要在仓库中有的,并且数量足够。
 
 
 
下面是具体操作:
1.  创建CUSTTEST表,并添加一些记录:如下图所示:
 
 
 
2.  创建ORDERTEST表,并添加一些记录:如下图所示:
 
 
(1)    cust_test表中建立删除触发器,实现上述2表的级联删除.
 
 
测试:如下图所示:
 
 
 
完成第一小题的操作。
 
 
 

本文出自 “beyond” 博客,谢绝转载!





    文章评论
 
2008-06-24 10:45:50
实例解释的很详细 不错 支持下

2008-07-10 13:36:37
check 约束可以用in代替or,这样更好一些,我觉得。

2008-07-24 09:35:15
不错啊.T-SQL的语句表述还是比较清析的.

 

发表评论

昵   称:
验证码:  点击图片可刷新验证码  博客过2级,无需填写验证码
内   容: