《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);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章