SQL实验六

trigger

  1. 如何创建 INSERT 触发器。

  1. 只有一个执行语句的时候
  2. create trigger 触发器名 befor/after
  3. on 表名 for each row
  4. 执行语句
  5. 有多个执行语句的时候
  6. create trigger 触发器名 befor/after
  7. on 表名 for each row
  8. begin
  9. 执行语句列表
  10. end
查看触发器
  1. 查询系统已有的触发器,可以是如下命令之一:
  • show triggers\G
  • show triggers like '%Student%'
  • select * from information_schema.triggers where trigger_name like 'update%'\G

其中的\G是以表格的形式输出

删除触发器

drop trigger 触发器名;

Signal SQLSTATE

MySQL Signal SQLSTATE 语句用于向客户端发送一个信号,以便在存储过程或函数中处理异常情况。它的语法如下:

SIGNAL SQLSTATE 'sqlstate' SET message_text = 'message'

其中,sqlstate 是一个5个字符的 SQL 状态码,用于指示错误的类型。 message_text 是一个可选的错误消息,用于提供更详细的错误信息。

 什么时候用before什么时候用after

 这个是用before 

use Student;
######### Begin #########
delimiter $$
create trigger dele_s1 before delete
on Student for each row
begin 
    SIGNAL SQLSTATE '03000' SET message_text = '不能删除该表中的数据';
end ;
$$
delimiter ;

########## End ##########

这个就是用after

use Student;
######### Begin #########
delimiter $$
create trigger dele_s2 after delete
on Student for each row
begin 
    delete from SC where SC.sno = old.sno;
end ;
$$
delimiter ;

########## End ##########

  1. 如何创建 DELETE 触发器。
触发器类型 NEW 和 OLD 的使用

MySQL 中定义了 NEW 和 OLD ,用来表示触发器的所在表中,触发了触发器的那一行数据,来引用触发器中发生变化的记录内容,具体地:

  • 在 INSERT 触发器里,NEW 表示将要或者已经新增的数据;

  • 在 UPDATE 触发器里,OLD 表示修改之前的数据,NEW 表示将要或者已经修改后的数据;

  • 在 DELETE 触发器里,OLD 表示将要或者已经删除的数据。

使用方法: NEW.columnName ( columnName 为相应数据表某一列名)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面为你介绍一下SQL数据库实验六嵌套查询。 嵌套查询是指在一个查询语句中嵌入另一个查询语句。嵌套查询可以通过子查询来实现,子查询可以嵌套在SELECT、FROM、WHERE等子句中,用于获取需要的数据。 下面是一个简单的示例: 假设我们有两张表:学生表(student)和成绩表(score),它们的结构如下: 学生表(student): | id | name | age | gender | |----|--------|-----|--------| | 1 | 张三 | 18 | 男 | | 2 | 李四 | 19 | 女 | | 3 | 王五 | 20 | 男 | | 4 | 赵六 | 21 | 女 | 成绩表(score): | id | student_id | course | score | |----|------------|--------|-------| | 1 | 1 | 语文 | 80 | | 2 | 1 | 数学 | 90 | | 3 | 2 | 语文 | 85 | | 4 | 2 | 数学 | 95 | | 5 | 3 | 语文 | 70 | | 6 | 3 | 数学 | 80 | 现在,我们要查询出每个学生的总成绩和平均成绩,可以使用嵌套查询来实现: ``` SELECT s.id, s.name, (SELECT SUM(score) FROM score WHERE student_id = s.id) AS total_score, (SELECT AVG(score) FROM score WHERE student_id = s.id) AS avg_score FROM student s; ``` 上述SQL语句中,首先查询学生表(student),然后通过嵌套查询获取每个学生的总成绩和平均成绩。在子查询中,WHERE子句指定了查询条件,即只查询与当前学生相关的成绩信息。 嵌套查询可以实现非常复杂的查询,但也可能导致查询效率低下。因此,在使用嵌套查询时,需要根据实际情况合理设计查询语句。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值