《SQL高级应用和数据仓库基础(MySQL版)》作业 ·004

问题列表

1.创建表date_test,包含列d,类型为date型。试向date_test表中插入两条记录,一条当前系统日期记录,一条记录为“1998-08-18”。

2.创建与dept表相同表结构的表dtest,将dept表中部门编号在40之前的信息插入该表。

3.创建与emp表结构相同的表empl,并将其部门编号为前30号的员工信息复制到empl表。

4.试为学生表student增加一列学生性别gender 默认值 “女”。

5.试修改学生姓名列数据类型为定长字符型10位。

6.简述5种约束的含义。

7.创建学生关系sc,包括属性名:
	–选课流水号 数值型 主键;
	–学生编号 非空 外键
	–课程编号 非空 外键;
	–成绩 0-100之间;

8.创建copy_emp,要求格式同emp表完全一样,不包含数据。

9.创建copy_dept,要求格式同dept表完全一样,不包含数据。

10.设置copy_emp 表中外键deptno,参照copy_dept中deptno,语句能否成功,为什么?

11.追加copy_dept表中主键deptno

参考题解

1.创建表date_test,包含列d,类型为date型。试向date_test表中插入两条记录,一条当前系统日期记录,一条记录为“1998-08-18”。

create table if not exists date_test(d date);

insert into date_test values(now());
insert into date_test values('1998-08-18');

2.创建与dept表相同表结构的表dtest,将dept表中部门编号在40之前的信息插入该表。

create table if not exists dtest as select * from dept where deptno < 40;

3.创建与emp表结构相同的表empl,并将其部门编号为前30号的员工信息复制到empl表。

create table if not exists emp1 as select * from emp where empno <= 30;

4.试为学生表student增加一列学生性别gender 默认值 “女”。

alter table student add column gender enum('男', '女') default '女';  -- 如果还有其他原有约束就加上去

5.试修改学生姓名列数据类型为定长字符型10位。

alter table student modify column sname char(10);  -- 如果还有其他原有约束就加上去

6.简述5种约束的含义。

1、非空约束(not null)
	不能为空值(null2、唯一约束(unique)
	值唯一,可以为空(并且空值可以不唯一)

3、主键约束(primary key)
	唯一非空,能唯一标识表中的一条记录(一个表中只能有一个主键)

4、外键约束(foreign key)
	由从表中的外键列引用主表中的引用列(只能是主键/唯一键)
	可以对此外键约束设置相关级联操作(默认update/delete时均为restrict5、默认值约束(default)
	设置插入数据时候的某列的默认值

7.创建学生关系sc,包括属性名:

  • 选课流水号 数值型 主键
  • 学生编号 非空 外键
  • 课程编号 非空 外键
  • 成绩 0-100之间
create table if not exists sc(
	scno int,
	sno int not null,
	cno int not null,
	credit int,
	constraint sc_scno_pk primary key(scno),
	constraint sc_sno_fk foreign key(sno) references student(sno),
	constraint sc_cno_fk foreign key(cno) references course(cno)
);

create trigger sc_credit_insert_trg
	before insert on sc
	for each row
	begin
		if new.credit < 0 then
			set new.credit = 0;
		elseif new.credit > 100 then
			set new.credit = 100;
		end if;
	end;

create trigger sc_credit_update_trg
	before update on sc
	for each row
	begin
		if new.credit < 0 then
			set new.credit = 0;
		elseif new.credit > 100 then
			set new.credit = 100;
		end if;
	end;

8.创建copy_emp,要求格式同emp表完全一样,不包含数据。

create table if not exists copy_emp like emp;

9.创建copy_dept,要求格式同dept表完全一样,不包含数据。

create table if not exists copy_dept like dept;

10.设置copy_emp 表中外键deptno,参照copy_dept中deptno,语句能否成功,为什么?

因为之前第89两道题我把主键约束也复制了过来
所以根据以下SQL成功执行、在Navicat里表的设计里粗略观察无异状这点来看,应该是可以的

create table dept(
	deptno int primary key
);

create table emp(
	empno int primary key,
	deptno int,
	foreign key(deptno) references dept(deptno)
);

create table if not exists copy_emp like emp;
create table if not exists copy_dept like dept;

alter table copy_emp add foreign key(deptno) references copy_dept(deptno);

11.追加copy_dept表中主键deptno

因为我觉得第9题所述的“格式完全一样”包括了约束,所以复制表的时候我把应该已经有了主键约束

假设现在这个表(copy_dept)没有主键约束好了,就按照下面这么写:
alter table copy_dept add primary key(deptno);
发布了49 篇原创文章 · 获赞 9 · 访问量 3121

猜你喜欢

转载自blog.csdn.net/qq_44220418/article/details/104857204
004