数据库对象练习
【HR/HR】
1、用学生选课场景创建表:
1.1
Student(id,sno,sname,telnum,email)
Course(id,cno,cname,teachername)
studentcourse(id,s_id,c_id)
-
CREATE TABLE student(
-
id NUMBER,
-
sno VARCHAR2 (15) NOT NULL,
-
sname VARCHAR2 (20) NOT NULL,
-
telnum VARCHAR2 (12),
-
email VARCHAR2 (50)
-
);
-
CREATE TABLE course(
-
id NUMBER,
-
cno VARCHAR2 (6) NOT NULL,
-
cname VARCHAR2 (30) NOT NULL,
-
teachername VARCHAR2(20)
-
);
-
CREATE TABLE studentcourse(
-
id NUMBER,
-
s_id NUMBER,
-
c_id NUMBER
-
);
-
ALTER TABLE student ADD CONSTRAINT pkey_sid PRIMARY KEY(id);
-
ALTER TABLE course ADD CONSTRAINT pkey_cid PRIMARY KEY(id);
-
ALTER TABLE studentcourse ADD CONSTRAINT pkey_scid PRIMARY KEY(id);
-
-
ALTER TABLE studentcourse ADD CONSTRAINT fkey_sid FOREIGN KEY(s_id) REFERENCES student(id);
-
ALTER TABLE studentcourse ADD CONSTRAINT fkey_cid FOREIGN KEY(c_id) REFERENCES course(id);
1.3 创建1个sequence :seq_stu_crs
-
CREATE SEQUENCE seq_stu_crs
-
START WITH 1
-
INCREMENT BY 1;
1.4 为三个表杜撰一批数据
-
INSERT INTO student(id,sno,sname,telnum,email)
-
VALUES (1,'12411200601','linyq','122','yahreso@qq.com');
-
INSERT INTO student(id,sno,sname,telnum,email)
-
VALUES (2,'12411200602','Cyin','123','');
-
INSERT INTO student(id,sno,sname,telnum,email)
-
VALUES (3,'12411200603','lee','124','');
-
INSERT INTO student(id,sno,sname,telnum,email)
-
VALUES (4,'12411200604','skittles','','');
-
-- 这边的id本来应该再建一个sequence来nextval的 因为懒所以忽略了
-
-
INSERT INTO course(id,cno,cname,teachername)
-
VALUES (1,'IT0631','Oracle','Wu Gang');
-
INSERT INTO course(id,cno,cname,teachername)
-
VALUES (2,'IT0634','Algorithm','Chen Haixia');
-
INSERT INTO course(id,cno,cname,teachername)
-
VALUES (3,'IT0633','Software Engieering','Zhou Lizhen');
-
-- 这边的id本来应该再建一个sequence来nextval的 因为懒所以忽略了
-
-
INSERT INTO studentcourse(id, s_id, c_id) VALUES (seq_stu_crs.NEXTVAL,1,1);
-
INSERT INTO studentcourse(id, s_id, c_id) VALUES (seq_stu_crs.NEXTVAL,1,2);
-
INSERT INTO studentcourse(id, s_id, c_id) VALUES (seq_stu_crs.NEXTVAL,1,3);
-
INSERT INTO studentcourse(id, s_id, c_id) VALUES (seq_stu_crs.NEXTVAL,2,1);
-
INSERT INTO studentcourse(id, s_id, c_id) VALUES (seq_stu_crs.NEXTVAL,3,1);
-
INSERT INTO studentcourse(id, s_id, c_id) VALUES (seq_stu_crs.NEXTVAL,2,3);
-
INSERT INTO studentcourse(id, s_id, c_id) VALUES (seq_stu_crs.NEXTVAL,4,2);
1.4.1 为student.telnum列建立普通B-TREE索引
-
CREATE INDEX sort_tel
-
ON student(telnum);
1.5 输出学生选课具体信息报表(学生名字,课程名字,教师名字)
-
SELECT sname, cname, teachername
-
FROM student, course, studentcourse sc
-
WHERE student.id = sc.s_id AND course.id = sc.c_id;
1.6 创建一个只读视图来固化1.5的报表 v_student_course
-
CREATE VIEW v_student_course AS
-
SELECT sname, cname, teachername
-
FROM student, course, studentcourse sc
-
WHERE student.id = sc.s_id AND course.id = sc.c_id
-
WITH READ ONLY;
1.6.1 为v_student_course建立同义词 ssc,并把该同义词的查询权限授权给hr用户
-
CREATE SYNONYM ssc FOR v_student_course;
-
-
GRANT SELECT ON ssc TO hr;
1.7 为Course表创建一个唯一性索引(teachername),因为要求一个老师只能教一门课
-
CREATE UNIQUE INDEX sort_tcname
-
ON course(teachername);
1.8 用Delete 删除studentcourse表,分别回滚,和提交
-
savepoint a;
-
DELETE FROM studentcourse;
-
ROLLBACK TO a;
1.9 用Truncate 删除studentcourse数据
-
TRUNCATE TABLE studentcourse;
1.10 通过对应的数据字典查找上述3个表的信息,并做出解释
-
SELECT * FROM user_tables;
1.11 删除3个表的所有约束
-
ALTER TABLE studentcourse DROP CONSTRAINT fkey_sid;
-
ALTER TABLE studentcourse DROP CONSTRAINT fkey_cid;
-
ALTER TABLE student DROP CONSTRAINT pkey_sid;
-
ALTER TABLE course DROP CONSTRAINT pkey_cid;
1.12 删除3个表,并再次查看对应的数据字典信息
-
DROP TABLE student;
-
DROP TABLE course;
-
DROP TABLE studentcourse;
-
-
SELECT * FROM user_tables;