授权,触发器,嵌入式SQL与存储过程🌵

 

授权

🎈授权(GRANT)

GRANT 权限 ON TABLE/DATABASE 表名/数据库名

TO 用户1,用户2… /PUBLIC

[WITH GRANT OPTION];

操作权限:SELECT,INSERT,UPDATE,DELETE

ALL PRIVILEGES:4种权限的总和

PUBLIC:表示将权限授予所有人

WITH GRANT OPTION:表示获得了这个权限的用户还可以将权限赋给其他用户。

🎈收回权限(REVOKE)

REVOKE 权限

ON TABLE/DATABASE 表名/数据库名

FROM 用户1,用户2… /PUBLIC

[RESTRICT | CASCADE];

RESTRICT:表示只收回语句中指定的用户的权限

CASCADE:表示除了收回指定用户的权限外,还收回该用户赋予的其他用户的权限。

 

触发器

🧇触发器主要有以下三特点:

  1. 当数据库程序员声明的事件发生时,触发器被激活。声明的事件可以是对某个特定关系的插入、删除或更 新。

  2. 当触发器被事件激活时,不是立即执行,而是首先由触发器测试触发条件,如果事件不成立,响应该事件 的触发器什么都不做。

  3. 如果触发器声明的条件满足,则与该触发器相连的动作由DBMS执行。动作可以阻止事件发生,可以撤销事 件。

🍘注意:

  • 触发器可以引用当前数据库以外的对象,但只能在当前数据库中创建触发器。

  • 不能在临时表或系统表上创建触发器,但触发器可以引用临时表。

🎈创建触发器

CREATE TRIGGER 触发器名称 [BEFORE | AFTER]

[DELETE | INSERT | UPDATE OF 列名] //触发事件

ON 表名

[REFERENCING <临时视图名>]

[FOR EACH ROW | FOR EACH STATEMENT]

[WHEN <触发条件>] //WHEN后面跟触发条件,指明当什么条件满足时,执行下面的触发动作

BEGIN

<触发动作> //BEGIN...END 中定义触发动作,即当触发条件满足时,需要数据库做什么

END [触发器名称

BEFORE/AFTER:指明是在执行触发语句之前激发触发器还是执行触发语句之后激发触发器。

DELETE:当一个DELETE语句从表中删除行时激发触发器。

INSERT:当一个INSERT语句向表中插入行时激发触发器。

UPDATE/UPDATE OF(列名):当UPDATE修改表中的值时,激发触发器,也可加(OF 列名)指定是某一列的值被修改时激发触发器。

REFERENCING:触发器运行过程中,系统会生成两个临时视图,分别存放更新前和更新后的值,对于行级触发器,为OLD ROW 和NEW ROW,对于语句级触发器,为OLD TABLE和NEW TABLE。

  • REFERENCING new row AS nrow / REFERENCING old row AS orow 。

FOR EACH ROW:表示为行级触发器,对每一个被影响的元组(即每一行)执行一次触发过程。

FOR EACH STATEMENT:表示为语句级触发器,对整个事件只执行一次触发过程,为默认方式。

🍞创建触发器时需指定:

  • 触发器名称

  • 在其上定义触发器的表

  • 触发事件:触发器将何时激发

  • 触发条件:满足什么条件时执行触发动作

  • 触发动作:指明触发器执行时应做的动

🎈更改和删除触发器

ALTER TRIGGER <触发器名> [BEFORE|AFTER]

DELETE|INSERT|UPDATE OF [列名]

ON 表名|视图名

AS

BEGIN

要执行的SQL语句

END

🎈删除触发器

DROP TRIGGER <触发器>

 

嵌入式SQL

SQL提供了将SQL语句嵌入到某种高级语言中的方式,通常采用预编译的方法。

  1. 区分主语言与SQL语句的方式: EXEC SQL <SQL语句>

  2. 向主语言传递SQL语句执行的状态信息的方式: SQLCA,即SQL通信区,是系统默认定义的全局变量。

  3. 主变量(共享变量):

    • 主语言通过主变量向SQL语句提供参数,主变量是由主语言的程序定义的,并用SQL的DECLARE语句说明。

    • 在SQL语句中,为了与SQL中的属性名区分,在引用共享变量时,前面需要加“ : ”

游标

SQL语言是面向集合的,一条SQL语句可以产生或处理多条记录。而主语言是面向记录的,一组主变量一次只 能放一条记录,所以,引入游标,通过移动游标指针来决定获取哪一条记录。

  1. 🍙定义游标:

    EXEC SQL DECLARE <游标名称> CURSOR FOR

    它只是一条说明性语句,定义游标后,其中的SELECT语句并不执行。

  2. 🍙打开游标:

    EXEC SQL OPEN <游标名称>

    该语句执行游标定义中的SELECT语句,同时游标处于活动状态。游标是一个指针,此时指向查询结果的第一 行之前

  3. 🍙推进游标:

    EXEC SQL FETCH 游标名 INTO 变量表

    该语句执行时,游标推进一行,并把游标指向的行(称为当前行)中的值取出,送到共享变量中。

  4. 🍙关闭游标:

    EXEC SQL CLOSE 游标名

    该语句关闭游标,使它不再和查询结果相联系。游标关闭后,后面还可以再打开。

存储过程

存储过程(Procedure)是一组为了完成特定功能的SQL语句集合,经编译后存储在数据 库中,用户通过指定存储过程的名称并给出参数来执行。

CREATE PROCEDURE 存储过程名(IN|OUT|IN OUT 参数1 数据类型,IN|OUT|IN OUT 参数2 数据类型…)

[AS] //参数的数据类型只需要指明类型名即可,不需要指定宽度。具体宽度由外部调用者决定

BEGIN

<SQL语句>

END

🎁由于存储过程在创建时即在数据库服务器上进行了编译并存储在数据库中,所以存储过程运行要比单个的SQL语句块要快。

posted @ 2022-05-12 21:25  仙人掌掌掌掌  阅读(67)  评论(0)    收藏  举报