一、实体、参照、用户自定义完整性
1、【单选题】CREATE TABLE时定义属性上的约束条件,检查列值是否满足一个条件表达式的定义关键词为:
正确答案: A
2、【多选题】创建患者住院主记录表pat_visit,并定义主码{patient_id,visit_id}的正确语句为:
正确答案: AD
答案解析:多个属性构成的主码,只能进行表级定义。表级定义并不一定要求放在所有属性定义的后面。patient_id VARCHAR2(10), PRIMARY KEY (patient_id,visit_id), 这里中间有逗号,表示的是2个定义语句。
3、【多选题】
oracle数据库中,下表为科室字典dept_dict内容,其中dept_code为主码。创建员工字典:
CREATE TABLE staff_dict
(emp_no VARCHAR2(10) , --员工号
dept_code VARCHAR2(20), --科室代码,
NAME VARCHAR2(10), --姓名
PRIMARY KEY(emp_no),
FOREIGN KEY(dept_code) REFERENCES dept_dict(dept_code)
ON DELETE SET NULL
);
执行上述语句后,下列语句能够正常执行的是:
正确答案: AB
答案解析:update dept_dict set dept_code = '004' WHERE dept_code = '003'; 执行后,staff_dict表中数据('S01','003','王五'),科室代码'003'在本参照表中就找不到相应数据。所以拒绝执行。
INSERT INTO staff_dict_1 VALUES ('S01','004','赵六');科室代码'004'在被参照表中没哟相应的数据。
二、完整性约束、断言和触发器
1、【多选题】
CREATE TABLE T1
(C1 VARCHAR2(10),
C2 NUMBER UNIQUE,
CONSTRAINT PK_Key PRIMARY KEY(C1)
);
上述语句为表T1的定义语句,下列语句能正常执行的有:
正确答案: CD
答案解析:完整性约束条件的语句修改,需要删除后新增。
2、【多选题】下列关于断言的说法正确的是:
正确答案: BD
3、【多选题】插入数据是,判断课程表中Course不同课程的数量,不同种类的课程数量超过了10个,则阻止插入操作。要实现此功能,触发器的触发事件不应定义为:
正确答案: ACD
答案解析:校验插入后的内容,实施阻断,应当用after
4、【多选题】
课程表:Course(Cno,Cname,Cpno,Ccredit)
学生选课表:SC(Sno,Cno,Grade)
Ccredit为课程的学分,Cno为SC表的外码,参照Course(Cno)。
触发器定义语句:
CREATE TRIGGER Trigger_1
BEFORE UPDATE OF CCREDIT ON Course
FOR EACH ROW
DECLARE
i_count INT;
BEGIN
IF :NEW.CCREDIT IS NULL THEN
SELECT COUNT(1) INTO i_count
FROM SC
WHERE Cno = :NEW.Cno;
IF i_count > 0 THEN
raise_application_error(-20001,'该课程有选修学生');
END IF;
END IF;
END;
对上述触发器描述正确的是:
正确答案: ABD
答案解析:删除前判断,不是删除后判断。