问题列表
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)
不能为空值(null)
2、唯一约束(unique)
值唯一,可以为空(并且空值可以不唯一)
3、主键约束(primary key)
唯一非空,能唯一标识表中的一条记录(一个表中只能有一个主键)
4、外键约束(foreign key)
由从表中的外键列引用主表中的引用列(只能是主键/唯一键)
可以对此外键约束设置相关级联操作(默认update/delete时均为restrict)
5、默认值约束(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,语句能否成功,为什么?
因为之前第8、9两道题我把主键约束也复制了过来
所以根据以下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);