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数据库学习笔记(九)实验课六之触发器和存储过程 的相关文章

  • mysql语句中的*星号是什么意思?

    Ex mysql query SELECT FROM members WHERE id id 这意味着选择表中的所有列
  • 无法使用 Django 应用程序从容器连接到 MySQL docker 容器

    当我尝试从运行 Django 应用程序的 docker 容器连接到运行 MySQL 的容器时 出现以下错误 django db utils OperationalError 2003 Can t connect to MySQL serve
  • C#:SQL 查询生成器类

    在哪里可以找到好的 SQL 查询构建器类 我只需要一个简单的类来构建 SQL 字符串 仅此而已 我需要它用于 C 和 MySql 我真的不需要像 Linq 或 NHibernate 这样的东西 谢谢 由于 Google 将我引导至此页面 我
  • 通过连接从两个表中删除?

    我有两个表如下 tbl1 tbl2 id article id title image whole news tags author older datetime 其中 tbl1 id gt tbl2 article id 如何从两个表中删
  • MySQL 全文搜索不适用于某些单词,例如“house”

    我已经在 3 个字段中的一小部分记录上设置了全文索引 也尝试了 3 个字段的组合 并得到了相同的结果 有些单词返回结果很好 但某些单词如 house 和 澳大利亚 不这样做 有趣的是 澳大利亚 和 家乡 这样做 这似乎是奇怪的行为 如果我添
  • PHP 选择后立即删除

    我有一个 PHP 服务器脚本 它从 MySQL 数据库中选择一些数据 一旦我将 mysql query 和 mysql fetch assoc 的结果存储在我自己的局部变量中 我就想删除我刚刚选择的行 这种方法的问题在于 PHP 似乎对我的
  • MySql 最后插入 ID,连接器 .net

    我正在使用 MySql Connector net 我需要获取最后一个查询生成的插入 id 现在 我假设返回值是MySqlHelper ExecuteNonQuery应该是最后一个插入id 但它只返回1 我正在使用的代码是 int inse
  • Mysql innoDB 不断崩溃[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我的数据库 mysql 服务器不断崩溃 重新启动 我不知道该怎么办 我不断在 dbname org err 文件中收到以下内容 13120
  • PDO SQLSRV 和 PDO MySQL 在获取 int 或 float 时返回字符串

    当您获取时 PDO MS SQL Server 和 PDO MySQL 都会返回一个字符串数组 即使列的 SQL 类型本应是数字类型 例如 int 或 float 我设法解决了这个问题 但我想了解为什么它们一开始就这样设计 是不是因为PDO
  • java mysql 准备好的语句

    我正在尝试使用 java 向数据库中进行简单的插入 它告诉我我的 sql 语法已关闭 但是 当我复制打印出来的字符串并将其放入 phpmyadmin 中的 sql 命令中时 它会正确执行该命令 并且我似乎无法弄清楚 java 中的字符串查询
  • 如何使用 MySQL 的 LOAD DATA LOCAL INFILE 在导入 CSV 时将字符串日期更改为 MySQL 日期格式

    我正在使用 MySQL 的 LOAD DATA LOCAL INFILE SQL 语句将数据从 CSV 文件加载到现有数据库表中 下面是一个 SQL 语句示例 LOAD DATA LOCAL INFILE file csv INTO TAB
  • 阻止注销页面后的后退按钮

    我有 php 注销页面 当用户单击注销链接时 请参阅此页面并重定向到索引页面 但是当单击后退按钮时 我会看到带有用户数据的上一页 当然 当我刷新页面时 我看不到以前的页面和数据 我在单击注销并单击后退按钮后检查了其他代码 drupal 但我
  • MySQL 使用 ALTER IGNORE TABLE 出现重复错误

    我的 MySQL 中有一个有重复项的表 我尝试删除重复项并保留一项 我没有主键 我可以通过以下方式找到重复项 select user id server id count as NumDuplicates from user server
  • InnoDB 因读未提交而死锁! - Java - Glassfish - EJB3(JPA/Hibernate)

    几天来 我在使用 Glassfish EJB3 和 Mysql InnoDB 的 Java 应用程序上遇到了死锁问题 配置 Mysql InnoDB Ver 14 12 Distrib 5 0 51a 适用于 debian linux gn
  • 无法通过套接字“/var/lib/mysql/mysql.sock”连接到本地 MySQL 服务器 (2)

    当我尝试连接 mysql 时出现以下错误 Can t connect to local MySQL server through socket var lib mysql mysql sock 2 这个错误有解决办法吗 其背后的原因可能是什
  • Mysql 中 UNION 子句的替代方案

    我有两张桌子 表 a 表 b table a ID 1 2 3 4 5 7 table b ID 2 3 4 5 6 我必须得到这样的输出而无需UNION命令 ID 1 2 3 4 5 6 7 注意 我有一个联合解决方案 select fr
  • MySQL MIN/MAX 所有行

    我有桌子Races与行ID Name and TotalCP 我选择分钟 TotalCP FROM Races 但是我想选择具有最小值的整行 我如何在单个查询中做到这一点 从聚合值获取整行的一般形式是 SELECT FROM Races W
  • Mysql 创建定义器

    我创建了一个在 CentOS Web 服务器上运行的 Intranet Web 应用程序 该应用程序使用另一个本地服务器 始终是 CentOS 作为 MySQL 数据库 在数据库内部我创建了例程 这些例程总是这样开始 CREATE DEFI
  • MySQL连接字符集问题

    我在 Mac 上使用带有 MySQL 的 velosurf 没有任何编码问题 但是当我切换到 Linux 计算机时 从 velosurf 获得的值未正确编码 我发现这可能是默认连接字符集的问题 在 Mac 上我得到 mysql gt sho
  • gem install mysql:无法构建 gem 本机扩展 (Mac Lion)

    我为 Mac OS X Lion 安装了 MySQL 5 5 27 来自 dmg 现在我尝试安装 mysql gem gem install mysql Building native extensions This could take

随机推荐

  • 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语句的对象时