問題列表
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);