MySQL数据库学习笔记(九)实验课六之触发器和存储过程

2023-11-18

没想到这就是最后一次实验了。

一点知识:

道具 – delimiter / DELIMITER

这是用于指定语句分隔符的特殊命令
默认情况下,MySQL使用分号(;)作为语句的结束符。然而,当我们需要定义存储过程、触发器或函数等包含多条SQL语句的对象时,分号会被误认为语句结束,导致出现语法错误。
为了解决这个问题,可以使用DELIMITER命令将分号(;)替换为其他字符作为语句分隔符,以便在创建存储过程、触发器或函数等对象时,正确处理多条SQL语句。
用法:

DELIMITER //
内容
DELIMITER ;

主动技能 – 存储过程

因为要调用,所以类似于英雄主动技能
创建存储过程:

create procedure 名字()
begin
	具体内容
end;

有参数:

create procedure 名字(
in 参数1 int,
in 参数2 int
)
begin
	具体内容
end;

删除存储过程:

drop procedure 名字;

调用存储过程

call 名字

被动技能 – 触发器

不需要调用,类似于被动技能
推荐文章:文章
不得不说,你如果想要狠狠搞清楚触发器怎么用的话,我还是推荐你看推荐文章
创建触发器:

create trigger 名字
前/后 触发方式 表名
for each row
begin
··········
end;

删除触发器:

drop trigger 名字;

实验:

实验数据:

student表:
在这里插入图片描述
student1表:
在这里插入图片描述
course表:
在这里插入图片描述
sc表:
在这里插入图片描述
teacher表:
在这里插入图片描述

实验开始:

1,创建存储过程,使用 student 表中的学生人数来初始化一个局部变量, 并调用这个存储过程:

DELIMITER //
create procedure GetStudentCount()
begin
    declare studentCount int;	#定义局部变量

    select count(*) into studentCount from student; #数行数
    # select count(*) into a 的意思是将count(*)的值赋给a

    select studentCount AS StudentCount;

end //
DELIMITER ;

调用:

call GetStudentCount();

2,创建存储过程,比较两学生的年龄,若前者比后者大就输出 0,否则输 出 1:

delimiter //
create procedure CompareStudentAge(
    in student1_num int,
    in student2_num int
)	#我使用的参数是学生编号,你也可以尝试不同的写法
begin
    declare result int;
    declare age1 int;
    declare age2 int;
    select Sage into age1 from student where Sno = student1_num;
    select Sage into age2 from student where Sno = student2_num; #进行查询操作

    if age1 > age2 then
        set result = 1;
    else
        set result = 0;
    end if;

    select result as CompareResult;

end //
delimiter ;

调用:

call CompareStudentAge(2008001,2008003);

3,创建触发器,在 student 表中删除学生信息的同时将 sc 表中该学生的 选课信息删除,以确保数据的完整性:

delimiter //
create trigger delete_student_sc
before delete on student
for each row
begin
    delete from sc where Sno = OLD.Sno;
end;
delimiter ;

触发:

delete from student where Sno = 2008002;

4,假设 student1 表和 student 表的结构和内容都相同,在 student 上创建 一个触发器,如果添加一个学生的信息,该信息也会被添加到 student1 表中:

delimiter //
create trigger add_student_st1
after insert on student
for each row
begin
    insert into student1 (Sno, Sname, Ssex, Sage, Sdept)
    VALUES (new.Sno, new.Sname, new.Ssex, new.Sage, new.Sdept);
end;
delimiter ;

触发:

insert into student(sno, sname, ssex, sage, sdept) VALUES ('2008006','杨过','男','19','IS');

5,定义一个 BEFORE 行级触发器,为 teacher 表定义完整性规则“插入教 授的信息时,工资不得低于 4000 元,如果低于 4000 元,则自动改为 4000 元”:

delimiter //
create trigger teacher_income
before insert on teacher
for each row
begin
    if new.Income < 4000 then
        set new.Income = 4000;
    end if;
end;
delimiter ;

6,删除 teacher 表上的触发器 teacher_Income :

drop trigger teacher_income;

结束~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL数据库学习笔记(九)实验课六之触发器和存储过程 的相关文章

随机推荐

  • Callable 接口实现java 的多线程

    java 中创建多线程最常见的是继承Thread 的子类重写run 方法 还有就是实现Runnable 接口 我们最好使用实现了Runnable 接口的方法原因有两点 因为java 的单继承的特点 所以说使用第一种方法不能继承其他父类了 采
  • Lunix历史及如何学习

    1 Lunix是什么 1 1 Lunix是操作系统还是应用程序 Lunix是一套操作系统 它提供了一个完整的操作系统当中最底层的硬件控制与资源管理的完整架构 这个架构是沿袭Unix 良好的传统来的 所以相当的稳定而功能强大 Lunix具有核
  • SCI论文润色插件Product Content Checker扩展程序

    下载地址 https www gugeapps net webstore detail product content checker ilmaafbmfcklldgoehebccigadbkbdpc download 打开方式 直接将下载
  • simhash算法原理及实现

    一篇不错的介绍simhash的文章 如下 http blog csdn net chenguolinblog article details 50830948
  • 多个ajax请求时控制执行顺序或者等待执行完成后的操作

    当确保执行顺序时 一 请求加async false 这样所有的ajax就会同步执行 请求顺序就是代码顺序 代码部分 when ajax async false url url1 ajax async false url url2 done
  • ai绘画小程序基于novelai的tag列表源码展示(独家)

    视频 哔哩哔哩 看视频 介绍 一个tag列表展示
  • 代码行统计工具_cloc

    下载并运行 在Github下载稳定发布版本 Releases AlDanial cloc GitHub 直接下载exe文件 放在需要统计代码的文件夹下 用cmd或是powershell运行 cloc 1 96 exe 注意 之前有个空格 c
  • hive 错误 InvalidObjectException(message:Role admin already exists.)

    InvalidObjectException message Role admin already exists at org apache hadoop hive metastore ObjectStore addRole ObjectS
  • python去掉列表中的单引号_从Python中的列表中删除单引号

    我有一个输入字符串 result testing 0 8841 642000 0 80 014521 60 940653 4522126666 1500854400 1500842014000 name 80 014521 60 99653
  • C语言实现顺序表

    线性表是数据结构中的逻辑结构 线性表采用顺序存储的方式存储就称之为顺序表 数组是顺序表在实际编程中的具体实现方式之一 本篇主要介绍顺序表 顺序表的创建 添加元素 删除元素 遍历输出等操作 1 创建顺序表 1 1定义顺序表结构体 结构体包含三
  • Fisco Bcos区块链一(搭建单群组FISCO BCOS联盟链)

    文章目录 区块链开荒 技术文档 https fisco bcos documentation readthedocs io zh CN latest index html 一 搭建第一个区块链网络 1 搭建单群组FISCO BCOS联盟链
  • java基础语法

    java基础语法 1 Java概述 1 1 Java语言发展史 了解 1 2 Java语言跨平台原理 理解 1 3 JRE和JDK 记忆 1 4 JDK的下载和安装 应用 1 4 1 下载 1 4 2 安装 1 4 3 JDK的安装目录介绍
  • python进阶之多线程对同一个全局变量的处理

    通常情况下 from threading import Thread global num 0 def func1 global global num for i in range 1000000 global num 1 print fu
  • sklearn决策树怎么使用ccp_alpha进行剪枝

    本站原创文章 转载请说明来自 老饼讲解 机器学习 ml bbbdata com 目录 一 CCP后剪枝是什么 二 如何通过ccp alpha进行后剪枝 1 查看CCP路径 2 根据CCP路径剪树 三 完整CCP剪枝应用实操DEMO 四 CC
  • c语言初学者如何编写一个相加求和程序

    欢迎来到南方有乔木的博客 博主主页 点击点击 戳一戳 博主QQ 1636758318 博主简介 一名在校大学生 正在努力学习Java语言编程 穷且意坚 不坠青云之志 希望能在编程的世界里找到属于自己的光 跪谢帅气or美丽的朋友们能够帮我点赞
  • 【翻译】Dagre-D3 文档整理和翻译

    地址 github Dagre D3 目录 文章目录 dagre d3 设计优先级 安装 npm Bower Browser Scripts 源代码构建 如何使用Darge 聚焦渲染 例子 配置布局 生成的图像 第三部分例子 推荐阅读 da
  • Android——Intent用法

    Intent 意图 一般可以被用于启动活动 启动服务以及发送广播等场景 现在先说一下启动活动这部分 Intent分为显式Intent和隐式Intent 一 显式Intent的使用 Intent有多个构造函数的重载 常用的一个有Intent
  • 基于Qt的OpenGL编程(3.x以上GLSL可编程管线版)---(十九)混合

    Vries的教程是我看过的最好的可编程管线OpenGL教程 没有之一 其原地址如下 https learnopengl cn github io 04 20Advanced 20OpenGL 03 20Blending 关于混合的详细知识了
  • WOW装备大全(07.11.30)

    德需求 布拉克希斯的睡眠法杖 装备后绑定双手法杖131 223 伤害速度 3 每秒伤害 59 550 点护甲 39 耐力 耐久度 100 100 需要等级 64 装备 在猎豹 熊 巨熊和枭兽形态下的攻击强度提高234点 大地守卫者拾取后绑定
  • MySQL数据库学习笔记(九)实验课六之触发器和存储过程

    没想到这就是最后一次实验了 一点知识 道具 delimiter DELIMITER 这是用于指定语句分隔符的特殊命令 默认情况下 MySQL使用分号 作为语句的结束符 然而 当我们需要定义存储过程 触发器或函数等包含多条SQL语句的对象时