• MYSQL数据库实验(存储过程与触发器)


    个人配置说明: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 triggersG;
      

    在这里插入图片描述

    ②定义这样的触发器

    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清空表中的数据:https://blog.csdn.net/chenshun123/article/details/79676446

    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` 删除。
      
  • 相关阅读:
    链表和数组的区别在哪里 【微软面试100题 第七十八题】
    关于链表问题的面试题目 【微软面试100题 第七十七题】
    复杂链表的复制 【微软面试100题 第七十六题】
    二叉树两个结点的最低公共父结点 【微软面试100题 第七十五题】
    数组中超过出现次数一半的数字 【微软面试100题 第七十四题】
    对称字符串的最大长度 【微软面试100题 第七十三题】
    Singleton模式类 【微软面试100题 第七十二题】
    数值的整数次方 【微软面试100题 第七十一题】
    旋转数组中的最小元素 【微软面试100题 第六十九题】
    把数组排成最小的数 【微软面试100题 第六十八题】
  • 原文地址:https://www.cnblogs.com/Tattoo-Welkin/p/10335247.html
Copyright © 2020-2023  润新知