(1)创建名为student(学生信息)的表,sno
–主键
,sex
–CHECK约束
(男,女)。
-- 创建表student
CREATE TABLE student (
sno CHAR(10),
sname VARCHAR2(8),
sex CHAR(4) DEFAULT '男',
birthday DATE,
sdept CHAR(20),
CONSTRAINT pk_sno PRIMARY KEY(sno),
CONSTRAINT ck_sex CHECK(sex in('男','女'))
);
(2)创建名为course(课程信息)的表,cno
–主键
,cname
–唯一约束
-- 创建表course
CREATE TABLE course (
cno CHAR(10) PRIMARY KEY,
cname CHAR(30) UNIQUE,
ccredit NUMBER(3)
);
(3)创建名为score(学生成绩)的表,sno
–参照完整性约束
,级联删除
,主键
,cno
–参数完整性约束
,级联删除
,主键
,grade
–CHECK约束
-- 创建表score
CREATE TABLE score (
sno CHAR(10),
cno CHAR(10),
grade NUMBER(3),
CONSTRAINT pk_sno_cno PRIMARY KEY(sno, cno),
CONSTRAINT ck_sno FOREIGN KEY(sno) REFERENCES student(sno) ON DELETE CASCADE,
CONSTRAINT ck_cno FOREIGN KEY(cno) REFERENCES course(cno) ON DELETE CASCADE,
CONSTRAINT ck_grade CHECK(grade BETWEEN 0 AND 100)
);
2.增加、修改和删除字段,要求:
(1)给student
表增加一个memo
(备注)字段,类型为VARCHAR2(200)
。
ALTER TABLE student ADD(memo VARCHAR2(200));
(2)将memo
字段的类型修改为VARCHAR2(300)
。
ALTER TABLE student MODIFY(memo VARCHAR2(300));
(3)删除memo
字段
ALTER TABLE student DROP COLUMN memo;
3.向表中添加数据,更新数据,删除数据,并验证约束。要求:
(1)使用INSERT INTO
命令向三个表中分别插入若干航数据,验证主键约束、唯一约束以及默认值约束。
(1.1)向student
表中插入数据,验证默认值约束。
INSERT INTO student(sno,sname,birthday,sdept) VALUES('1', '张三', SYSDATE, '描述');
(1.2)向student
表中插入数据,验证CHECK
约束,只能输入男
或者女
,否则报错。
INSERT INTO student VALUES('1', '张三', '无', SYSDATE, '描述');
插入date
类型的几种方式:
INSERT INTO student VALUES('1', '张三', '无', SYSDATE, '描述');
INSERT INTO student VALUES('2', '赵四', '男', to_date('2019-01-02','YYYY-MM-DD'), '描述')
INSERT INTO student VALUES('3', '王五', '女', to_date('2019-01-02 20:47:00','YYYY-MM-DD hh24:mi:ss'), '描述')
INSERT INTO student VALUES('4', '马自', '女', to_date('20190214','YYYYMMDD'), '描述')
(1.3)向course
表中插入数据,验证cname
的唯一性约束。
INSERT INTO course VALUES('1', '语文', '98');
如果插入了两条cname
相同的记录,则报错。
(1.4)向score
表中插入数据。
INSERT INTO score VALUES('1','1','98');
INSERT INTO score VALUES('1','2','88');
INSERT INTO score VALUES('1','3','99');
INSERT INTO score VALUES('1','4','76');
INSERT INTO score VALUES('1','5','88');
INSERT INTO score VALUES('1','6','66');
INSERT INTO score VALUES('2','1','88');
INSERT INTO score VALUES('2','2','88');
INSERT INTO score VALUES('2','3','88');
INSERT INTO score VALUES('2','4','88');
INSERT INTO score VALUES('2','5','88');
INSERT INTO score VALUES('2','6','88');
INSERT INTO score VALUES('3','1','88');
INSERT INTO score VALUES('3','2','88');
INSERT INTO score VALUES('3','3','88');
INSERT INTO score VALUES('3','4','88');
INSERT INTO score VALUES('3','5','88');
INSERT INTO score VALUES('3','6','88');
(2)使用UPDATE
命令更新数据,验证外键约束。
更新sno
等于1
的学生的学号为4
,因为学生表的sno列是score表sno列的外键,score表sno列外键属性为级联删除。所以不能级联更新。
UPDATE student SET sno = '4' WHERE sno = '1';
报错。
(3)使用DELETE
命令删除数据。
删除sno
等于2
的学生。他的成绩将会被删除。
DELETE FROM student WHERE sno = '1';
删除前:
删除后:
4.删除表。
(1)利用DROP TABLE
命令删除表。
DROP TABLE student;
删除失败。
应该先删除score
表,再删除student
表。