数据库实验三:创建和管理数据表
惠州学院
《数据库应用》课程实验报告
实验题目: 实验三:创建与管理数据库
姓名: 曹锐旋 学号: 230703030
班级: 23 电子信息工程(3)班 指导教师: 黄冲
一、实验目的
- 掌握 SQL Server 中使用 T-SQL 语句创建和管理数据库的基本操作。
- 学习如何使用 SQL Server Management Studio (SSMS) 进行数据库的创建和管理。
- 理解数据库文件和文件组的概念及其在数据库维护中的作用。
二、实验内容和要求
- 使用 T-SQL 语句创建数据库
- 数据库的维护
三、实验主要仪器设备和材料
- 计算机及操作系统:PC 机,Windows 7/Windows 10。
- 数据库管理系统:SQL Server 2012/2019。
- SQL Server Management Studio (SSMS)。
四、实验方法、步骤及结果测试
- 使用 T-SQL 语句创建数据库:编写 SQL 脚本,使用 CREATE DATABASE 语句来创建数据库,并指定数据文件和日志文件的属性。
- 使用 SSMS 创建数据库:通过 SQL Server Management Studio 的图形用户界面来创建数据库,设置文件的属性和位置。
- 数据库维护操作:使用 T-SQL 语句对数据库进行维护,如新增文件组和文件、删除文件组和文件、修改数据库文件的容量和增长率、修改数据库名称和删除数据库。
3.2 实验
【1】使用 T-SQL 创建商品销售管理数据库 Goods 中的数据表。(SSMS 课堂练习)
- 客户表 Consumer
字段名 | 数据类型 | 含义 | 非空约束 | 约束 |
---|---|---|---|---|
Consumer_Id | nvarchar(30) | 客户编号 | Not null | 主键 |
Account | varchar(20) | 账号 | Not null | 唯一约束 |
Password | varchar(20) | 密码 | null | |
Name | nvarchar(20) | 姓名 | null | |
Sex | nchar(1) | 性别 | null | 检查约束(值“男”或“女”) |
Tel | varchar(20) | 电话 | null | |
Address | nvarchar(60) | 收货地址 | null |
- 员工表 Employee
字段名 | 数据类型 | 含义 | 非空约束 | 约束 |
---|---|---|---|---|
Employee_Id | nvarchar(30) | 员工号 | Not null | 主键 |
Account | varchar(20) | 账号 | Not null | 唯一约束 |
Password | varchar(20) | 密码 | null | |
Name | nvarchar(20) | 姓名 | null | |
Sex | nchar(1) | 性别 | null | 检查约束(值“男”或“女”) |
Tel | varchar(20) | 电话 | null |
- 商品类别表 Category
字段名 | 数据类型 | 含义 | 非空约束性 | 约束 |
---|---|---|---|---|
Category_id | nvarchar(30) | 商品类别编号 | Not null | 主键 |
Name | nvarchar(30) | 商品类别名称 | null |
- 商品表 Shop_goods
字段名 | 数据类型 | 含义 | 非空约束 | 约束 |
---|---|---|---|---|
Goods_Id | nvarchar(30) | 商品编号 | Not null | 主键 |
Name | nvarchar(30) | 商品名称 | Not null | |
Brand | nvarchar(30) | 品牌 | null | |
Size | nvarchar(30) | 规格 | null | |
Price | decimal(8,2) | 单价 | Not null | 检查约束(值 >0) |
Stock | int | 库存数量 | Not null | 检查约束(值 >=0) |
Image_Url | varchar(50) | 图片路径 | null | |
Description | nvarchar(100) | 商品描述 | null | |
Category_Id | nvarchar(30) | 商品类别编号 | Not null | 外键 |
答案:
第一步 创建数据库
IF NOT EXISTS (SELECT * FROM sys.databases WHERE name = 'Goods')
BEGINCREATE DATABASE Goods;
END
GO
第二步 创建客户表 Consumer
USE Goods GOCREATE TABLE Consumer(Consumer_Id nvarchar(30) NOT NULL PRIMARY KEY,Account varchar(20) NOT NULL UNIQUE,Password varchar(20) NULL,Name nvarchar(20) NULL,Sex nchar(1) NULL CHECK (Sex='男' OR Sex='女'),Tel varchar(20) NULL
);
第三步 商品类别表 Category
USE Goods GOCREATE TABLE Category(Category_Id nvarchar(30) NOT NULL PRIMARY KEY,Name nvarchar(20) NULL,
);
第四步 创建商品表 Shop_goods
USE Goods GOCREATE TABLE Shop_goods(Goods_Id nvarchar(30) NOT NULL PRIMARY KEY,Name nvarchar(30) NOT NULL UNIQUE,Brand nvarchar(30) NULL,Size nvarchar(20) NULL,Price decimal(8,2) NOT NULL, CHECK (Price>0),Stock int NOT NULL CHECK (Stock>=0),Image_Url varchar(50) NULL,Description nvarchar(100) NULL,Category_Id nvarchar(30) NOT NULL,FOREIGN KEY (Category_Id) REFERENCES Category(Category_id)
);
第五步 创建订单表 Shop_Order
USE Goods GOCREATE TABLE Shop_Order(Order_Id nvarchar(30) NOT NULL PRIMARY KEY,Goods_Id nvarchar(30) NOT NULL FOREIGN KEY REFERENCES Shop_goods(Goods_Id),Quantity int NULL CHECK(Quantity > 0),Order_Date date NULL DEFAULT GETDATE(),Status nvarchar(10) NULL,Consumer_Id nvarchar(30) NOT NULL FOREIGN KEY REFERENCES Consumer(Consumer_Id),Comment nvarchar(100) NULL,Employee_Id nvarchar(30) NOT NULL FOREIGN KEY REFERENCES Employee(Employee_Id),Shipping_Date date NULL
);
3.6 实验
【2】使用 SSMS 图形化界面为 Goods 数据库中的 Consumer 客户表添加字段 WeChat(微信号),添加完成后再将其删除。
答案:
第一步 添加字段 WeCha
USE Goods;
GOALTER TABLE Consumer
ADD WeChat nvarchar(50) NULL;
GO
第二步 删除字段 WeChat
USE Goods;
GOALTER TABLE Consumer
DROP COLUMN WeChat;
GO
【2】使用 T-SQL 为 Goods 数据库中的 Employee 员工表完成以下修改。
(1)添加字段 Nation(民族),数据类型为 varchar(10),允许为空值。
(2)修改 Nation 字段的数据类型为 nvarchar(15)。
(3)删除 Nation 字段。
答案:
第一步 添加字段 Nation,数据类型为 varchar(10)
USE Goods
GOALTER TABLE Employee
ADD Nation varchar(10);
第二步 修改 Nation 字段的数据类型为 nvarchar(15)
USE Goods
GOALTER TABLE Employee
ALTER COLUMN Nation nvarchar(15);
第三步 删除 Nation 字段
USE Goods
GOALTER TABLE Employee
DROP COLUMN Nation;
【3】使用 T-SQL 删除 Goods 数据库 Shop_Order 订单表中的所有约束。
答案:
第一步 查询 Goods 数据库中 Shop_Order 表的所有约束
USE Goods;SELECT CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE TABLE_NAME = 'Shop_Order';
第二步 删除约束
USE Goods;ALTER TABLE Shop_Order
DROP CONSTRAINT PK__Shop_Ord__F1E4607BCA1CA8F1;ALTER TABLE Shop_Order
DROP CONSTRAINT FK__Shop_Orde__Goods__5EBF139D;ALTER TABLE Shop_Order
DROP CONSTRAINT CK__Shop_Orde__Quant__5FB337D6;ALTER TABLE Shop_Order
DROP CONSTRAINT FK__Shop_Orde__Consu__619B8048;ALTER TABLE Shop_Order
DROP CONSTRAINT FK__Shop_Orde__Emplo__628FA481;
【4】使用 T-SQL 删除 Goods 数据库 Consumer 客户表、Shop_goods 商品表、Employee 员工表中的所有约束。
答案:
第一步 查询 Goods 数据库中 Consumer 客户表 的所有约束
USE Goods;SELECT CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE TABLE_NAME = 'Consumer';
第二步 删除约束
USE Goods;ALTER TABLE Consumer
DROP CONSTRAINT PK__Consumer__0EE77F37BC8CABF7;ALTER TABLE Consumer
DROP CONSTRAINT UQ__Consumer__B0C3AC46407206A2;ALTER TABLE Consumer
DROP CONSTRAINT CK__Consumer__Sex__628FA481;
第三步 另外两个表同理
【5】使用 T-SQL 为 Goods 数据库中的 Shop_goods 商品表、Consumer 客户表、Employee 员工表、Shop_Order 订单表添加约束,参照实验 3.2。
答案:
第一步 Shop_goods 商品表
USE Goods;
GO-- 添加检查约束:Price > 0
ALTER TABLE Shop_goods
ADD CONSTRAINT CK_Shop_goods_Price CHECK (Price > 0);-- 添加检查约束:Stock >= 0
ALTER TABLE Shop_goods
ADD CONSTRAINT CK_Shop_goods_Stock CHECK (Stock >= 0);-- 添加外键约束:Category_Id 引用 Category 表的 Category_Id
ALTER TABLE Shop_goods
ADD CONSTRAINT FK_Shop_goods_Category FOREIGN KEY (Category_Id) REFERENCES Category(Category_Id);
GO
第二步 Consumer 客户表
-- 添加唯一约束:Account 唯一
ALTER TABLE Consumer
ADD CONSTRAINT UQ_Consumer_Account UNIQUE (Account);-- 添加检查约束:Sex 为 '男' 或 '女'
ALTER TABLE Consumer
ADD CONSTRAINT CK_Consumer_Sex CHECK (Sex IN ('男', '女'));
GO
第三步 Employee 员工表
-- 添加唯一约束:Account 唯一
ALTER TABLE Employee
ADD CONSTRAINT UQ_Employee_Account UNIQUE (Account);-- 添加检查约束:Sex 为 '男' 或 '女'
ALTER TABLE Employee
ADD CONSTRAINT CK_Employee_Sex CHECK (Sex IN ('男', '女'));
GO
第四步 Shop_Order 订单表
-- 添加外键约束:Consumer_Id 引用 Consumer 表的 Consumer_Id
ALTER TABLE Shop_Order
ADD CONSTRAINT FK_Shop_Order_Consumer FOREIGN KEY (Consumer_Id) REFERENCES Consumer(Consumer_Id);-- 添加外键约束:Employee_Id 引用 Employee 表的 Employee_Id
ALTER TABLE Shop_Order
ADD CONSTRAINT FK_Shop_Order_Employee FOREIGN KEY (Employee_Id) REFERENCES Employee(Employee_Id);-- 添加检查约束:Total_Amount > 0
ALTER TABLE Shop_Order
ADD CONSTRAINT CK_Shop_Order_Total_Amount CHECK (Total_Amount > 0);
GO
【6】修改 Goods 数据库中 Category 商品类别表的字段名,将 Category_id 修改为 Categ_id,将 Name 修改为 CategName。
答案:
USE Goods;EXEC sp_rename 'Category.Category_id', 'Categ_id', 'COLUMN';
EXEC sp_rename 'Category.Name', 'CategName', 'COLUMN';
➡️
【7】将 Goods 数据库中 Category 商品类别表重命名为 Categ。
答案:
USE Goods;EXEC sp_rename 'Category', 'Categ';
➡️
【8】删除 Goods 数据库中的 Consumer 客户表。
答案:
USE Goods;DROP TABLE Consumer;
➡️
3.6 实验
【1】使用 T-SQL 为 Goods 数据库中的 Category 商品类别表添加记录,如表 1 所示。
表 1
Category_id | Name |
---|---|
b010 | 生鲜 |
b012 | 熟食 |
b013 | 保健品 |
答案:
USE Goods;INSERT INTO Category (Category_id, Name)
VALUES ('b010', '生鲜'),('b012', '熟食'),('b013', '保健品');
【2】使用 T-SQL 为 Goods 数据库中 Consumer 客户表添加记录,如表 2 所示。
表 2
Consumer_Id | Account | Password | Name |
---|---|---|---|
c0011 | 567821945 | haf65658 | 郝飞 |
c0012 | 269871534 | Gut98589 | 郭甜 |
答案:
USE Goods;INSERT INTO Consumer (Consumer_Id, Account, Password, Name)
VALUES ('c0011', '567821945', 'haf65658', '郝飞'),('c0012', '269871534', 'Gut98589', '郭甜');
【3】使用 T-SQL 为 Goods 数据库中 Shop_goods 商品表添加记录,如表 36 所示。
表 3
Goods_Id | Name | Brand | Size | Price | Stock | Image_Url | Description | Category_Id |
---|---|---|---|---|---|---|---|---|
g0019 | 香菇 | 秦农 | 500g | 8.2 | 600 | d:\b001\ g0019.jpg | 鲜美无农药残留 | b001 |
g0020 | 鸡翅 | 凤鸣 | 500g | 9.0 | 700 | d:\b003\ g0020.jpg | 天然谷物饲养 | b003 |
g0021 | 奶黄包 | 安井 | 400g | 10 | 800 | d:\b004\ g0021.jpg | 奶香浓郁 | b004 |
答案:
第一步 创建对应 Category_Id
USE Goods;INSERT INTO Category (Category_Id)
VALUES ('b001'),('b003'),('b004');
第二步 添加记录
USE Goods;INSERT INTO Shop_goods (Goods_Id, Name, Brand, Size, Price, Stock, Image_Url, Description, Category_Id)
VALUES ('g0019', '香菇', '秦农', '500g', 8.2, 600, 'd:\b001\g0019.jpg', '鲜美无农药残留', 'b001'),('g0020', '鸡翅', '凤鸣', '500g', 9.0, 700, 'd:\b003\g0020.jpg', '天然谷物饲养', 'b003'),('g0021', '奶黄包', '安井', '400g', 10, 800, 'd:\b004\g0021.jpg', '奶香浓郁', 'b004');
【4】使用 T-SQL 将 Shop_goods 商品表中的 Category_Id 字段值为“b001”的记录 Brand 字段更新为“山灵”。
答案:
USE Goods;UPDATE Shop_goods
SET Brand = '山灵' WHERE Category_Id = 'b001';
【5】使用 T-SQL 将 Shop_goods 商品表中 Category_Id(商品类别)字段值为“b002”且 Price(单价)小于 4 元钱的商品提高单价 1 元。
答案:
USE Goods;UPDATE Shop_goods
SET Price = Price + 1
WHERE Category_Id = 'b002' AND Price < 4;
【6】将 Shop_goods 商品表中商品名称为“牙膏”、品牌为“两面针”的记录商品编号更新为“g0026”,同时对 Shop_Order 订单表进行级联更新。
答案:
USE Goods;UPDATE Shop_goods
SET Goods_Id = 'g0026'
WHERE Name = '牙膏' AND Brand = '两面针';UPDATE Shop_Order
SET Goods_Id = 'g0026'
WHERE Goods_Id IN (SELECT Goods_IdFROM Shop_goodsWHERE Name = '牙膏' AND Brand = '两面针'
);
表中没有这条数据,所有没有变化。
【7】将 Shop_goods 商品表中,商品编号为“g0006”的记录删除,同时对 Shop_Order 订单表进行级联删除。
答案:
USE Goods;DELETE FROM Shop_goods WHERE Goods_Id = 'g0006';
DELETE FROM Shop_Order WHERE Goods_Id = 'g0006';
【8】使用 T-SQL 删除 Category 商品类别表和 Consumer 客户表所有记录。
答案:
USE Goods;DELETE FROM Category;
DELETE FROM Consumer;
因为 Category 存在外键约束,所有 Category 无法清除记录。