Relatório de experimento do banco de dados Mysql - experimente cinco procedimentos armazenados e gatilhos

Nesta série, atualizarei alguns relatórios experimentais que o professor pediu para escrever recentemente ~
Por favor, tente fazer uma referência ao meu artigo, não faça um cv cegamente, afinal, isso ainda é muito importante para nossos trabalhos e estudos futuros.

A partir desta experiência, a operação do banco de dados mysql não é executada na linha de comando cmd. Devido ao tamanho e complexidade do código, o MySQL Workbench é necessário: Clique duas vezes no banco de dados (a senha ainda é a senha para iniciar
insira a descrição da imagem aqui
o linha de comando cmd)
insira a descrição da imagem aqui
Exemplo de uso:
bancos de dados de consulta

show databases;

Execute a linha atual: ctrl+enter
insira a descrição da imagem aqui
Outros atalhos comuns:
1. Execute todo o script sql: [Ctrl]+[Shift]+[Enter]

2. Execute a linha atual: [Ctrl] + [Enter]

3. Comentar/descomentar:【Ctrl】+【/】

4. Formatar a instrução sql (embelezar a instrução sql): 【Ctrl】+【B】

5. Preenchimento automático: [Ctrl] + [Espaço]


Sem mais delongas, poste o título deste experimento:

Crie tabelas de alunos, tabelas de currículo e tabelas de seleção de curso.

#创建学生表:包括学号,姓名,年龄,性别,院系
CREATE TABLE student
(
Sno VARCHAR(7)PRIMARY KEY,
Sname VARCHAR(10)NOT NULL,
Sage INT,
Ssex VARCHAR(2),
Sdept VARCHAR(20) DEFAULT '计算机系'
);

#创建课程表:包括课程号,课程名,选修课课程号,学分
CREATE TABLE course
(
Cno VARCHAR(10)PRIMARY KEY,
Cname VARCHAR (20)NOT NULL,
Cpno VARCHAR(10),
Ccredit INT
);


#创建选课表
CREATE TABLE sc
(
Sno VARCHAR(7),
Cno VARCHAR(10),
grade INT,
FOREIGN KEY (sno) REFERENCES student(Sno),
FOREIGN KEY (cno) REFERENCES course(cno)
);

Inserir dados na tabela:

#  向学生表S中插入数据
INSERT INTO student
   (Sno,Sname,Sage,Ssex,Sdept)
VALUE
   ("10001","张三",20,'男','计算机'),
   ("10002","李梅",19,'女','计算机'),
   ("10003","王五",18,'男','CS'),
   ("10004","小明",21,'男','计算机'),
   ("10006","黎明",18,'男','艺术表演'),
   ("10008","杰克",21,'男','计算机'),
   ("10005","小红",22,'女','CS');

#  向课程表C中插入数据   
INSERT INTO course
   (Cno,Cname,Cpno,Ccredit)
VALUE
   ("1","离散数学",NULL,5),
   ("2","线性代数",'3',6),
   ("3","高等数学",NULL,4),
   ("4","数据结构",'3',6),
   ("5","操作系统",'1',4),
   ("6","数据库",'4',5);



#  向选课表SC中插入数据  
INSERT INTO sc
  (Sno,Cno,grade)
VALUE
  ("10001","1",70),
  ("10001","6",56),
  ("10003","4",90),
  ("10003","5",83),
  ("10004","1",75),
  ("10004","3",90),
  ("10008","1",70),
  ("10008","5",70),
  ("10008","6",88),
  ("10002","1",85),
  ("10002","6",89);

1. Crie e chame o seguinte procedimento armazenado.

1. Defina uma função armazenada para calcular a idade média de todos os alunos por gênero.

delimiter //
create procedure avg_age_sex(in stu_sex varchar(30))
begin
select avg(Sage) from student where Ssex=stu_sex;
end//
delimiter ;
call avg_age_sex('女');

2. Escreva um procedimento armazenado para calcular a nota média do aluno com base em um determinado número de aluno

delimiter //
create procedure avg_grade_cno1(in stu_cno int)
begin
select avg(grade) as '平均成绩' from sc where Cno=stu_cno;
end//
delimiter ;

call avg_grade_cno1(1);

3. Crie um procedimento armazenado, que pode consultar a nota média do curso especificado (nome do curso) e retornar o resultado com o parâmetro OUT.

delimiter //
create procedure avg_grade7(in stu_cno varchar(30),out avgsc1 decimal(6,4))
begin
select avg(grade) as '平均成绩' from sc,course where course.Cname=stu_cno and course.Cno=sc.Cno;
end//
delimiter ;
set @avgsc1 = 60;
call avg_grade7('高等数学',@avgsc1);
select @avgsc1;

4. Crie um procedimento armazenado p_Insertstu para inserir um novo aluno na tabela de dados do aluno e fornecer o valor do parâmetro real correspondente (o valor do parâmetro real é determinado pelo usuário).

delimiter //
create  procedure p_Insertstu(in Sno varchar(7),in Sname varchar(10),in Sage int,in Ssex varchar(2),in Sdept varchar(20))
reads sql data
begin
insert into student values(Sno,Sname,Sage,Ssex,Sdept);
end//
delimiter ;
call p_Insertstu('10009','紫涵','20','女','计算机');
select  * from student;

Em segundo lugar, crie um gatilho.

1. Crie um gatilho para excluir as informações de seleção de curso do aluno na tabela de informações de seleção de curso enquanto exclui as informações do aluno na tabela de alunos, de modo a garantir a integridade dos dados;

#关闭安全模式
show variables like 'SQL_SAFE_UPDATES';
SET SQL_SAFE_UPDATES = 0;
drop trigger if exists delete_stu;
#题目代码
delimiter //
create trigger delete_stu1
after delete on student
for each row
begin 
	delete from sc where sc.Sno=@Sno;
end //

2. Crie um gatilho para adicionar as informações de seleção de curso do aluno na tabela de informações de seleção de curso e, ao mesmo tempo, aumente as informações de seleção de curso do aluno na tabela de alunos para garantir a integridade dos dados;

delimiter //
create trigger update_stu1
after insert on sc
for each row
begin 
	set @csum=0;
    select count(Sno) into @csum from sc where Sno=@Sno;
	update student set csum=@csum where Sno=@sno;
end //

Arquivo sql completo:
Link: https://pan.baidu.com/s/1PD_mD9Q-uCNQPANq2TmFew?pwd=69ev
Código de extração: 69ev

Recomende um bom vídeo na estação b:
artigos avançados do banco de dados mysql

Acho que você gosta

Origin blog.csdn.net/A779929/article/details/128225428
Recomendado
Clasificación