首页 > 编程语言 >Lab4-事务与并发编程实现

Lab4-事务与并发编程实现

时间:2023-10-19 15:55:52浏览次数:32  
标签:班级 记录 编程 class 并发 学生 表中 Lab4 id

          实验三 存储过程与触发器

实验目的:

学习SQL语言进行编程的基本方法与技术,能够编写存储过程、触发器解决数据库需要处理的复杂问题。


实验内容:

1、 设计一个存储过程或者自定义函数,练习存储过程的设计方法。
2、 设计触发器,理解触发器的工作原理与设计方法。


实验过程及要求:

1、 编写存储过程,传入学号,查询该同学所有选修记录,结果显示信息项包括学号、姓名、班级名称、课程名、学分、成绩.
2、撰写存储过程,完成以下操作代码写在空白处。
(1)插入数据学院2020级计算机科学技术1班、计算机科学技术2班记录。
(2)针对2个班级,产生学生的记录插入到学生信息表中,每班学生数30人。
3、编写触发器:当在学生表中更新(增、删、改)学生记录时,计算学生班级总人数,并更新班级表中对应的记录中


实验具体操作


1、 编写存储过程,传入学号,查询该同学所有选修记录,结果显示信息项包括学号、姓名、班级名称、课程名、学分、成绩.


DROP PROCEDURE if exists GetStudentCourseRecords;
DELIMITER //

CREATE PROCEDURE GetStudentCourseRecords(IN student_id VARCHAR(9))
BEGIN
    SELECT s.Sid, s.Sname, g.gname, c.Cname, c.credit, sc.score1,sc.score2
    FROM ustudent s
    INNER JOIN ugrade g ON s.gid = g.gid
    INNER JOIN usc sc ON s.Sid = sc.sid
    INNER JOIN ucourse c ON sc.cid = c.Cid
    WHERE s.Sid = student_id;
END //

DELIMITER ;

call GetStudentCourseRecords('012005004');

img


2、撰写存储过程,完成以下操作代码写在空白处。
1)插入数据学院2020级计算机科学技术1班、计算机科学技术2班记录。
2)针对2个班级,产生学生的记录插入到学生信息表中,每班学生数30人。


DELIMITER //
DROP PROCEDURE if exists InsertClassData;
CREATE PROCEDURE InsertClassData()
BEGIN
    DECLARE i INT DEFAULT 1;
    DECLARE j INT DEFAULT 1;
    DECLARE random_sex varchar(5);


    -- 1) 插入数据学院2020级计算机科学技术1班、计算机科学技术2班记录
    WHILE i <= 2
        DO
            INSERT INTO ugrade (gid, gname, gyear)
            VALUES (CONCAT('20', LPAD(i, 2, '0')), CONCAT('计算机科学技术', i, '班'), 2020);

            SET i = i + 1;
        END WHILE;

    -- 2) 产生学生的记录插入到学生信息表中 每班学生数30人
    SET i = 1;
    WHILE i <= 2
        DO
            SELECT IF(RAND() < 0.5, '男', '女') INTO random_sex;

            WHILE j <= 30
                DO
                    INSERT INTO ustudent (Sid, Sname, Ssexy, Sbdate, gid, stele)
                    VALUES (CONCAT('S', LPAD(j, 7, '0')), CONCAT('stu', LPAD(j, 3, '0')), random_sex, '2002-01-01',
                            CONCAT('20', LPAD(i, 2, '0')), '1234567890');

                    SET j = j + 1;
                END WHILE;

            SET i = i + 1;
        END WHILE;
END //

DELIMITER ;


call InsertClassData()

img

执行之前表内容

ugrade


img

ustudent
img


执行之后

img

img

3、编写触发器:当在学生表中更新(增、删、改)学生记录时,计算学生班级总人数,并更新班级表中对应的记录中

DELIMITER //

CREATE TRIGGER UpdateClassStudentCount
AFTER INSERT ON ustudent
FOR EACH ROW
BEGIN
    DECLARE class_id VARCHAR(2);
    DECLARE student_count INT;

    -- class id
    SET class_id = NEW.gid;

    -- count of students in the class
    SELECT COUNT(*) INTO student_count FROM ustudent WHERE gid = class_id;

    -- ugrade table
    UPDATE ugrade SET gyear = student_count WHERE gid = class_id;
END //

DELIMITER ;


标签:班级,记录,编程,class,并发,学生,表中,Lab4,id
From: https://www.cnblogs.com/cwh-top/p/17774893.html

相关文章

  • 使用单例模式进行多线程编程
    title:aliases:tags:-工程技术-cpp/并发编程category:-方法stars:url:creation-time:2023-10-1914:32modification-time:2023-10-1915:27:06[[单例模式]]简而言之就是程序中的某个类只能实例化一个对象。因为对象只有一个,在不同线程中实例化的时候,实......
  • Linux shell编程学习笔记8:使用字符串
    一、前言字符串是大多数编程语言中最常用最有用的数据类型,这在Linuxshell编程中也不例外。本文讨论了LinuxShell编程中的字符串的三种定义方式的差别,以及字符串拼接、取字符串长度、提取字符串、查找子字符串等常用字符串操作,,以及反引号在echo和expr命令联合使用时的作用。二......
  • Linux shell编程学习笔记4:修改命令行提示符格式(内容和颜色)
    一、命令行提示符格式内容因shell类型而异Linux终端命令行提示符内容格式则因shell的类型而异,例如CoreLinux默认的shell是sh,其命令行提示符为黑底白字,内容为:tc@box:/$其中,tc为当前用户名,box为主机名,/为当前目录路径,$表示当前用户类型是普通用户 。 二、环境变量PS1存储了命令行提......
  • 实验2 C语言分支与循环基础应用编程
    实验任务1 #include<stdio.h>#include<stdlib.h>#include<time.h>#defineN5#defineN1374#defineN2465intmain(){intnumber;inti;srand(time(0));for(i=0;i<N;++i){number=rand()%(N2-N......
  • UNIX环境高级编程(第3版)pdf电子版
    UNIX环境高级编程(第3版)pdf电子版作者:史蒂文斯(W.RichardStevens)/拉戈(StephenA.Rago)原作名:AdvancedProgrammingintheUNIXEnvironment,ThirdEdition出版年:2014-6-1ISBN:9787115352118链接提取码:wl7r对于了解linux/UNIX的环境编程很有用,是一本不错的工......
  • 实验1 类和对象_基础编程1
    实验任务1task1.cpp1//标准库string,vector,array基础用法23#include<iostream>4#include<string>5#include<vector>6#include<array>78//函数模板9//对满足特定条件的序列类型T对象,使用范围for输出10template<typenameT>11v......
  • 第六届物业管理创新发展论坛在深召开,鹏业受邀参加并发表主题演讲
    10月12日至14日,由中国物业管理协会(以下简称“中物协”)主办,物业管理行业唯一报备商务部的国际性展会——2023中国国际物业管理产业博览会(以下简称“物博会”)在深圳会展中心隆重举行。本届物博会同期还召开了第六届物业管理创新发展论坛,由主论坛和近20场平行论坛组成,围绕智慧物业新实......
  • 推荐一款“自学编程”的宝藏网站!详解版~(在线编程练习,项目实战,免费Gpt等)
    ......
  • Redission并发锁报错:IllegalMonitorStateException: attempt to unlock lock, not loc
    生产上突然出现一条报错j.l.IllegalMonitorStateException:attempttounlocklock,notlockedbycurrentthreadbynodeid:1411e030-3c44-48d7-9eb6-6030022ce681thread-id:111ato.r.RedissonBaseLock.lambda$unlockAsync$2(RedissonBaseLock.java:323)......
  • 多线程编程同步:读写锁
    读写锁的定义互斥锁锁住后,保证仅有一个线程处理数据(多线程共享的)。要是数据的读取比写入更频繁,且读取操作不涉及共享变量的修改,应允许多个线程读取操作对共享变量的读取。直接使用互斥锁效率太低,若使用读写锁,可以大大提高效率。读写锁的分配规则:1)只要没有线程持有某个特定的读......