博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MYSQL数据库实验(存储过程与触发器)
阅读量:5140 次
发布时间:2019-06-13

本文共 2730 字,大约阅读时间需要 9 分钟。

个人配置说明:5.7.24 MySQL Community Server (GPL),环境CentOS 7

1.MYSQL 不支持语句触发(for each statement),只支持行触发(for each row,新旧数据通过关键字new和old区别)

实验:  数据库存储和触发器实验

一、实验目的

  1. 理解,实现并逐渐熟悉存储过程的使用
    存储过程(Stored Procedure)是指一组可编程的函数,是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。使用它的目的主要是它不用像SQL语句一样解释执行,而是相当于二进制文件直接运行即可,提高了效率.
  2. 掌握触发器的定义和使用
    触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。这在实际使用过程中非常实用.作为一名合格的数据库管理人员,是必须要掌握的.这节实验的目的也在于此.

二、实验环境

MYSQL

三、实验前准备

(1)准备电脑,课本(数据库系统概论第五版)
(2)了解与存储过程有关的命令
(3)了解与触发器有关的命令

四、实验内容与步骤

  1. 理解,实现并逐渐熟悉存储过程的使用

①创建对应的数据表,并实现例8.9(从账户1转制定数额的款到账户2中,假设数据表是Acount(num,tatal))

Procedure:程序
1. SQL语句

use tempdb ; create table  Account (AccountId int primary key ,Total double ); insert into  Account values(1,10000); insert into  Account values(2,20000); insert into  Account values(3,30000); insert into  Account values(4,40000); delimiter // create procedure zhuan(inAccountId int,outAccountId int ,amount double)       begin         declare output double ;         declare input double;            select total into output from Account where AccountId = outAccountId;            select total into input from Account where AccountId = inAccountId;            update Account set total=total-amount  where AccountId = outAccountId  ;            update Account set total=total+amount  where AccountId =  inAccountId;       end // delimiter ;

初始状态:

在这里插入图片描述

执行 call zhuan(1 2 4000);

2. 执行结果

在这里插入图片描述

  1. 掌握触发器的定义和使用

    ① 实现例5.23(定义一个before行级触发器,为教师表Teacher定义完整性规则"教师的工资不得低于4000元,如果低于4000元,则自动的改为4000元")
    ① 先查看有没有定义这样的触发器

    show triggers\G;

在这里插入图片描述

②定义这样的触发器

drop table  if exists Teacher ; create table Teacher(TID int  auto_increment primary  key ,name varchar(24) not null ,money int unsigned ,time timestamp default current_timestamp ); delimiter $$ CREATE TRIGGER tr1 BEFORE INSERT ON Teacher  FOR EACH ROW     BEGIN         IF (NEW.name='professor' and NEW.money < 4000) THEN             SET NEW.money = 4000;         end if;      end $$ delimiter ;

在这里插入图片描述

③测试 ( 看Teacher表里面有什么,并且插入,进行测试)

Select * from Teacher ;insert into Teacher  (name,money) values("professor",1000); insert into Teacher  (name,money) values("lecturer",3000); insert into Teacher  (name,money) values("professor",0); insert into Teacher  (name,money) values("lecturer",3000);

在这里插入图片描述

途中还用了truncate语句

④删除该触发器

Drop trigger tri ;show triggers \G;

在这里插入图片描述

五、评价分析及心得体会

通过本次实验我掌握了数据库中存储过程与触发器的使用,做了大量的练习,也明白在构建大型系统时尽量少使用触发器(不到萬不得已的情况下尽量不要使用! 另外,能用存储过程代替的触发器就用存储过程代替.)对数据库的认识也有了很大的进步,同时也掌握了这些操作。希望再接再厉,继续努力!!!

tips :

1.mysql清空表中的数据:

truncate table table_name;

2.chrome 篇

  1. chrome 打开不小心刚刚关闭的网页:ctrl+shift+T
  2. 新打开一个标签:ctrl+T
  3. 切换标签:ctrl+tab 或者是 ctrl+pg(up/down)

3.vim 篇

在这里插入图片描述

  1. vim 多行编辑:

    `CTRL+v` 进入“可视 块”模式,选取-> `I` (大写i )->写入->保存即可。
  2. vim 多行删除:

    `CTRL+v `进入“可视 块”模式,选取-> `d` 删除。

转载于:https://www.cnblogs.com/Tattoo-Welkin/p/10335247.html

你可能感兴趣的文章
关于vs2008设计视图假死的原因及解决方案总结
查看>>
[转]位运算(简版:方便+好用+好看+无废话)
查看>>
P4173 残缺的字符串(FFT)
查看>>
5、Angular2 Injectable 服务
查看>>
前端面试总结
查看>>
linux 如何查看防火墙是否开启
查看>>
PHP中include和require的区别详解
查看>>
golang http 服务器的接口梳理
查看>>
拆分订单===初
查看>>
springboot-FilterRegistrationBean
查看>>
分享8个帮助你学习快速编程的实用网站
查看>>
postgresql逻辑结构(一)
查看>>
数据库进阶了解
查看>>
11.3
查看>>
C#---#define条件编译
查看>>
最小费用最大流模板
查看>>
计算机网络体系结构作业题整理-第二章答案
查看>>
脚本,网络配置,指令
查看>>
Ubuntu中MySQL中文乱码解决
查看>>
关于jQuery的ajax的源码的dataType解读
查看>>