我是靠谱客的博主 幸福自行车,最近开发中收集的这篇文章主要介绍数据库系统概论:一些其他的SQL语句,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

    • 1. 存取控制:授予与收回
    • 2. 审计:AUDIT和NOAUDIT
    • 3. 参照完整性规则
    • 4. 完整性约束命名子句
    • 5. 断言
    • 6. 触发器

1. 存取控制:授予与收回

  1. GRANT
//将查询SC表的权限给U1
GRANT SELECT ON TABLE SC TO U1
WITH CHECK OPTION;//允许U1用户可将将权限授予其他用户
//把course和student表的全部操作权限授予用户U2和U3
GRANT ALL PRIVILEGES ON TABLE COURSE,STUDENT TO U2,U3;
//对属性列授权时,必须指出相应的属性列名
GRANT UPDATE(SNO),SELECT ON TABLE SC TO PUBLIC;
  1. REVOKE
REVOKE SELECT ON TABLE SC FROM PUBLIC;
//将用户U5权限收回的同时级联收回由U5派发的权限
REVOKE INSERT ON TABLE SC FROM U5 CASCADE;
  1. 创建角色
CREATE ROLE R1;

2. 审计:AUDIT和NOAUDIT

  1. 对修改SC表结构或修改SC表数据的操作进行审计
AUDIT ALTER,UPDATE ON SC;
  1. 取消对SC表的一切审计
NOAUDIT ALTER,UPDATE ON SC;

3. 参照完整性规则

CREATE TABLE SC(
SNO CHAR(9),
CNO CHAR(8),
GRADE INT,
PRIMARY KEY(SNO,CNO),
FOREIGN KEY(SNO) REFERENCES STUDENT(SNO)
ON DELETE CASCADE//当删除STUDENT表的元组时,级联删除SC表中相应的元组)
ON UPDATE CASCADE,//
FOREIGN KEY(CNO) REFERENCES COURSE(CNO)
ON DELETE NO ACTION//当删除COURSE表的元组时造成与SC表不一致时,拒绝删除)
ON UPDATE CASCADE,//

4. 完整性约束命名子句

  1. 定义
CREATE TABLE STUDENT(
SNO INT CONSTRAINT C1 CHECK(SNO BETWEEN 1000 AND 2000),
SNAME CHAR(20) CONSTRAINT C2 NOT NULL,
SEX CHAR(4) CONSTRAINT C3 CHECK(SEX IN('MAN','WOMEN')),
CONSTRAINT STUDENT_KEY PRIMARY KEY(SNO));
  1. 修改
//先将其删掉
ALTER TABLE STUDENT DROP CONSTRAINT C4;
//再添加
ALTER TABLE STUDENT ADD CONSTRAINT C5 CHECK(SNO BETWEEN 1000 AND 2000);

5. 断言

  1. 限制每一门课程最多60名学生选修
CREATE ASSERTION ASS_SC_COUN
CHECK(60>=(SELECT COUNT(*) FROM SC GROUP BY CNO));
  1. 删除断言
DROP ASSERTION ASS_SC_COUN;

6. 触发器

  1. 当对表SC的成绩属性进行修改时,若分数增加了10%,则将此次操作记录到另一个表S_U中
CREATE TRIGGER SC_T
AFTER UPDATE OF GRADE ON SC
REFERENCING
OLDROW AS OLDTUPLE,
NEWROW AS NEWTUPLE
FOR EACH ROW//行级触发器,每执行一次GRADE更新,下面的规则就执行一次
WHEN(NEWTUPLE.GRADE>=1.1*OLDTUPLE)
INSERT INTO S_U(SNO,CNO,OLDTUPLE,NEWGRADE)
VALUES(OLDTUPLE.SNO,OLDTUPLE.CNO,OLDTUPLE.GRADE,NEWTUPLE.GRADE)
  1. 定义一个BEFORE行级触发器,为教师表TEACHER定义完整性规则,教授的工资不得低于4000元,如果低于4000元,则自动改为4000
CREATE TRIGGER INSERT_UPDATE_TEACHER
BEFORE INSERT OR UPDATE ON TEACHER
REFERENCING NEWROW AS NEWTUPLE
FOR EACH ROW
BEGIN
IF(NEWTUPLE.JOB='教授')AND(NEWTUPLE.SAL<4000)
THEN NEWTUPLE.SAL:=4000;//使用插入或更新后的新值
END IF;
END;

最后

以上就是幸福自行车为你收集整理的数据库系统概论:一些其他的SQL语句的全部内容,希望文章能够帮你解决数据库系统概论:一些其他的SQL语句所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部