头歌实验MySQL-表结构与完整性约束的修改(ALTER)

目录

第1关:修改表名

第2关:添加与删除字段

第3关:修改字段

第4关:添加、删除与修改约束


第1关:修改表名

编程要求
数据库TestDb1中有表your_table,请根据提示,在右侧代码文件编辑窗中添加恰当的语句,将表名your_table更改为my_table。

USE TestDb1;

#请在以下空白处添加恰当的语句,将表名your_table更改为my_table:
alter table your_table rename as my_table;

第2关:添加与删除字段

编程要求
假设数据库MyDb中有表order(订单)和orderDetail(订单明细) 等表,两表的结构分别如下:

order表 

字段名称    数据类型    备注
orderNo    char(12)    订单号,主码
orderDate    date    订购日期
customerNo    char(12)    客户编号,外码,与customer.customerNo对应
employeeNo    char(12)    雇员工号,外码,与employee.employeeNo对应
orderDetail表 

字段名称    数据类型    备注
orderNo    char(12)    订单号,主属性,外码,与order.orderNo对应
productNo    char(12)    产品编号,主属性,外码,与product.productNo对应
quantityOrdered    int    订购数量
orderDate    date    订购日期
注:表orderDetail的主码由(orderNo,productNo)组成

编程的任务是对orderDetail表进行修改:

orderDetail表的orderDate列明显多余,因为同一订单中的每一笔交易都发生在同一天,这个日期在订单主体表order中已有记录,请删除列orderDate。
产品的单价是订单明细需要记录的内容,请在orderDetail中添加列unitPrice以记录产品的单价:
字段名称    数据类型    备注
unitPrice    numeric(10,2)    产品的成交单价
请根据提示,在右侧代码文件编辑窗中添加恰当的语句,实现上述编程任务。

use MyDb;

#请在以下空白处添加适当的SQL代码,实现编程要求

#语句1:删除表orderDetail中的列orderDate
ALTER TABLE orderDetail DROP COLUMN orderDate;

#语句2:添加列unitPrice
alter table orderDetail add unitPrice numeric(10,2)	;

第3关:修改字段

编程要求
数据库MyDb中有表addressBook(通信录),结构如下:

字段名称    数据类型    备注
serialNo    int    自动编号,主码
name    char(32)    姓名
company    char(32)    工作单位
position    char(10)    职位
workPhone    char(16)    办公电话
mobile    char(11)    手机
QQ    int    QQ号
weixin    char(12)    微信号
当初创建表的语句如下:

create table addressBook(
   serialNo int auto_increment primary key,
   name char(32),
   company char(32),
   position char(10),
   workPhone char(16),
   mobile char(11),
   QQ int,
   weixin char(12)
);
你的编程任务是对表addressBook作以下修改:

将QQ号的数据类型改为char(12);
将列名weixin改为wechat。

请根据提示,在右侧代码文件test3.sql编辑窗中添加恰当的语句,实现上述编程任务。

use MyDb;

#请在以下空白处添加适当的SQL语句,实现编程要求
alter table addressBook modify QQ char(12) ;
alter table addressBook rename column weixin to wechat;

第4关:添加、删除与修改约束

数据库MyDb中有以下两表:

Dept(部门)

字段名称    数据类型    备注
deptNo    INT    部门号,主键
deptName    VARCHAR(32)    部门名称,不同部门不允许重名
tel    char(11)    部门电话
mgrStaffNo    int    部门经理的工号,外码
Staff(职工)

字段名称    数据类型    备注
staffNo    INT    工号,主键
staffName    VARCHAR(32)    职工姓名
gender    CHAR(1)    性别,取值范围:F-女,M-男
dob    date    出生日期
Salary    numeric(8,2)    工资
dept    INT    部门号,外键
现通过以下语句,完成了两表的基础创建工作(部分约束没有实现):

create table Dept(
    deptNo int primary key,
    deptName varchar(32),
    tel char(11),
    mgrStaffNo int
);
create table Staff(
    staffNo int,
    staffName varchar(32),
    gender char(1),
    dob date,
    salary numeric(8,2),
    dept int
);
请在右侧代码编辑窗对应位置写出适当的语句,完成以下工作:
(1) 为表Staff添加主码;
(2) Dept.mgrStaffNo是外码,对应的主码是Staff.staffNo,请添加这个外码,名字为FK_Dept_mgrStaffNo;
(3) Staff.dept是外码,对应的主码是Dept.deptNo. 请添加这个外码,名字为FK_Staff_dept;
(4) 为表Staff添加check约束,规则为:gender的值只能为F或M;约束名为CK_Staff_gender;
(5) 为表Dept添加unique约束:deptName不允许重复。约束名为UN_Dept_deptName.

use MyDb;
#请在以下空白处填写适当的诘句,实现编程要求。
#(1) 为表Staff添加主码
ALTER TABLE Staff ADD CONSTRAINT PK_Staff PRIMARY KEY (staffNo);

#(2) Dept.mgrStaffNo是外码,对应的主码是Staff.staffNo,请添加这个外码,名字为FK_Dept_mgrStaffNo:
ALTER TABLE Dept ADD CONSTRAINT FK_Dept_mgrStaffNo 
FOREIGN KEY (mgrStaffNo) REFERENCES Staff(staffNo);

#(3) Staff.dept是外码,对应的主码是Dept.deptNo. 请添加这个外码,名字为FK_Staff_dept:
ALTER TABLE Staff ADD CONSTRAINT FK_Staff_dept 
FOREIGN KEY (dept) REFERENCES Dept(deptNo);

#(4) 为表Staff添加check约束,规则为:gender的值只能为F或M;约束名为CK_Staff_gender:
ALTER TABLE Staff ADD CONSTRAINT CK_Staff_gender 
CHECK (gender IN ('F', 'M'));

#(5) 为表Dept添加unique约束:deptName不允许重复。约束名为UN_Dept_deptName:
ALTER TABLE Dept ADD CONSTRAINT UN_Dept_deptName UNIQUE (deptName);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值