数据库实验三.docx
《数据库实验三.docx》由会员分享,可在线阅读,更多相关《数据库实验三.docx(13页珍藏版)》请在冰豆网上搜索。
数据库实验三
实验三
实验名称:
表的完整性约束(2课时)
一、实验目的
理解并掌握关系的完整性约束,熟练使用T-SQL语句为每张表添加表约束。
二、实验环境
采用Client/Server模式,学生为客户端,是MSSQLSERVER2000的中文客户端。
登录用户名是:
学号;密码为:
******。
用户名和密码以任课老师给出为准。
三、实验内容与步骤
1、通过企业管理器修改表约束,并生成脚本。
2、通过T-SQL语句修改表约束。
①分别为每张表建立主键约束。
②为相关表建立外键约束。
③ 在表employee加入CHECK约束:
输入的员工编号必须以E开头的5位数编号,性别只能为M/F。
④为销售主表sales中的发票编号字段建立UNIQUE约束。
四、实验结果
1.通过企业管理器修改表约束,并生成脚本。
为相关表建立外键约束。
①通过企业管理器为sales表建立外码,字段为:
cust_id,被参照表为customer
②在表employee加入CHECK约束:
输入的员工编号必须以E开头的5位数编号,性别只能为M/F。
通过企业管理器在表employee加入CHECK约束:
输入的员工编号必须以E开头的5位数编号,性别只能为M/F。
首先建立check约束:
CK_employee:
(emp_nobetween‘E0000’and‘E9999’)
CK_sex(sex=’M’orsex=’F’)
实验图如下:
测试CK_employee约束
测试语句:
insertintoemployee
(emp_no,emp_name,sex,dept,title,date_hired,salary)
values('D0003','张三','M','业务','职员',1900/01/21,43200)
测试CK_sex约束
测试语句:
insertintoemployee
(emp_no,emp_name,sex,dept,title,date_hired,salary)
values('E0003','张三','D','业务','职员',1900/01/21,43200)
③为销售主表sales中的发票编号字段建立UNIQUE约束。
创建unique约束,如下图:
测试unique约束:
测试语句:
insertintosales
(order_no,cust_id,sale_id,tot_amt,order_date,ship_date,invoice_no)
values(1,'00001','00001',25343,2012-11-11,2012-11-11,'000001');
insertintosales
(order_no,cust_id,sale_id,tot_amt,order_date,ship_date,invoice_no)
values(2,'00002','00001',25343,2012-11-11,2012-11-11,'000001');
脚本如下:
USE[test]
GO
/******Object:
Table[dbo].[customer]ScriptDate:
2012/11/2815:
00:
29******/
SETANSI_NULLSON
GO
SETQUOTED_IDENTIFIERON
GO
CREATETABLE[dbo].[customer](
[cust_id][nchar](5)NOTNULL,
[cust_name][nchar](20)NOTNULL,
[addr][nchar](40)NOTNULL,
[tel_no][nchar](10)NOTNULL,
[zip][nchar](6)NULL,
CONSTRAINT[PK_customer]PRIMARYKEYCLUSTERED
(
[cust_id]ASC
)WITH(PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON[PRIMARY]
)ON[PRIMARY]
GO
/******Object:
Table[dbo].[employee]ScriptDate:
2012/11/2815:
00:
29******/
SETANSI_NULLSON
GO
SETQUOTED_IDENTIFIERON
GO
CREATETABLE[dbo].[employee](
[emp_no][nchar](5)NOTNULL,
[emp_name][nchar](10)NOTNULL,
[sex][nchar]
(1)NOTNULL,
[dept][nchar](4)NOTNULL,
[title][nchar](6)NOTNULL,
[date_hired][datetime]NOTNULL,
[birthday][datetime]NULL,
[salary][int]NOTNULL,
[addr][nchar](50)NULL,
[Mod_date][datetime]NOTNULL,
CONSTRAINT[PK_employee]PRIMARYKEYCLUSTERED
(
[emp_no]ASC
)WITH(PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON[PRIMARY]
)ON[PRIMARY]
GO
/******Object:
Table[dbo].[product]ScriptDate:
2012/11/2815:
00:
29******/
SETANSI_NULLSON
GO
SETQUOTED_IDENTIFIERON
GO
CREATETABLE[dbo].[product](
[prod_id][nchar](5)NOTNULL,
[prod_name][nchar](20)NOTNULL,
CONSTRAINT[PK_product]PRIMARYKEYCLUSTERED
(
[prod_id]ASC
)WITH(PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON[PRIMARY]
)ON[PRIMARY]
GO
/******Object:
Table[dbo].[sale_item]ScriptDate:
2012/11/2815:
00:
29******/
SETANSI_NULLSON
GO
SETQUOTED_IDENTIFIERON
GO
CREATETABLE[dbo].[sale_item](
[order_no][int]NOTNULL,
[prod_id][nchar](5)NOTNULL,
[qty][int]NOTNULL,
[unit_price][numeric](9,2)NOTNULL,
[order_date][datetime]NULL,
CONSTRAINT[PK_sale_item]PRIMARYKEYCLUSTERED
(
[order_no]ASC,
[prod_id]ASC
)WITH(PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON[PRIMARY]
)ON[PRIMARY]
GO
/******Object:
Table[dbo].[sales]ScriptDate:
2012/11/2815:
00:
29******/
SETANSI_NULLSON
GO
SETQUOTED_IDENTIFIERON
GO
CREATETABLE[dbo].[sales](
[order_no][int]NOTNULL,
[cust_id][nchar](5)NOTNULL,
[sale_id][nchar](5)NOTNULL,
[tot_amt][numeric](9,2)NOTNULL,
[order_date][datetime]NOTNULL,
[ship_date][datetime]NOTNULL,
[invoice_no][nchar](10)NOTNULL,
CONSTRAINT[PK_invoice_no]PRIMARYKEYCLUSTERED
(
[order_no]ASC
)WITH(PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON[PRIMARY]
)ON[PRIMARY]
GO
ALTERTABLE[dbo].[employee]ADDCONSTRAINT[DF_employee_Mod_date]DEFAULT(getdate())FOR[Mod_date]
GO
ALTERTABLE[dbo].[sales]WITHCHECKADDCONSTRAINT[FK_sales_customer]FOREIGNKEY([cust_id])
REFERENCES[dbo].[customer]([cust_id])
GO
ALTERTABLE[dbo].[sales]CHECKCONSTRAINT[FK_sales_customer]
GO
ALTERTABLE[dbo].[employee]WITHCHECKADDCONSTRAINT[CK_employee]CHECK(([emp_no]>='E0000'AND[emp_no]<='E9999'))
GO
ALTERTABLE[dbo].[employee]CHECKCONSTRAINT[CK_employee]
GO
ALTERTABLE[dbo].[employee]WITHCHECKADDCONSTRAINT[CK_sex]CHECK(([sex]='M'OR[sex]='F'))
GO
ALTERTABLE[dbo].[employee]CHECKCONSTRAINT[CK_sex]
GO
2.通过T-SQL语句修改表约束。
①分别为每张表建立主键约束。
为product表建立主键约束:
usetest
Go
altertableproduct
addprimarykey(prod_id)
GO
usetest
Go
altertablesale_item
addprimarykey(order_no,prod_id)
GO
usetest
Go
altertablesales
addprimarykey(order_no)
GO
usetest
Go
altertablecustomer
addprimarykey(cust_id)
GO
usetest
Go
altertableemployee
addprimarykey(emp_no)
GO
②为相关表建立外键约束。
为sales表建立外键约束
语句为:
usetest
Go
altertablesales
addforeignkey(cust_id)REFERENCEScustomer(cust_id)
GO
③ 在表employee加入CHECK约束:
输入的员工编号必须以E开头的5位数编号,性别只能为M/F。
语句为:
usetest
Go
altertableemployee
addconstraintCK_employeeCHECK(emp_nobetween'E0000'and'E9999')
GO
usetest
Go
altertableemployee
addconstraintCK_sexCHECK(sex='M'orsex='F')
GO
实验结果:
④为销售主表sales中的发票编号字段建立UNIQUE约束。
语句为:
usetest
Go
altertablesales
addconstraintIX_invoice_noUNIQUE(invoice_no)
实验截图:
实验总结:
通过对通过企业管理器和用T-SQL创建外码,创建check约束,以及unique约束有了进一步的了解和使用。