在這個(gè)系列會(huì)更新一些最近老師要求寫的實(shí)驗(yàn)報(bào)告~
大家盡量對(duì)著我的文章做一個(gè)參考,不要盲目的cv,畢竟這個(gè)對(duì)于我們以后的工作學(xué)習(xí)還是十分重要的。
從這個(gè)實(shí)驗(yàn)開(kāi)始,就不在cmd命令行里面進(jìn)行mysql數(shù)據(jù)庫(kù)的操作,因?yàn)榇a長(zhǎng)度和代碼的復(fù)雜性,需使用 MySQL Workbench:
雙擊數(shù)據(jù)庫(kù)(密碼還是啟動(dòng)cmd命令行的密碼)
使用示例:
查詢databases
show databases;
運(yùn)行當(dāng)前行:ctrl+enter
其他常用快捷方式:
1、執(zhí)行整篇sql腳本:【Ctrl】+【Shift】+【Enter】
2、執(zhí)行當(dāng)前行:【Ctrl】+【Enter】
3、注釋/取消注釋:【Ctrl】+【/】
4、格式化sql語(yǔ)句(美化sql語(yǔ)句):【Ctrl】+【B】
5、自動(dòng)補(bǔ)全:【Ctrl】+【Space】
事不宜遲,貼上本次實(shí)驗(yàn)的題目:
創(chuàng)建學(xué)生表,課程表,選課表。
#創(chuàng)建學(xué)生表:包括學(xué)號(hào),姓名,年齡,性別,院系
CREATE TABLE student
(
Sno VARCHAR(7)PRIMARY KEY,
Sname VARCHAR(10)NOT NULL,
Sage INT,
Ssex VARCHAR(2),
Sdept VARCHAR(20) DEFAULT '計(jì)算機(jī)系'
);
#創(chuàng)建課程表:包括課程號(hào),課程名,選修課課程號(hào),學(xué)分
CREATE TABLE course
(
Cno VARCHAR(10)PRIMARY KEY,
Cname VARCHAR (20)NOT NULL,
Cpno VARCHAR(10),
Ccredit INT
);
#創(chuàng)建選課表
CREATE TABLE sc
(
Sno VARCHAR(7),
Cno VARCHAR(10),
grade INT,
FOREIGN KEY (sno) REFERENCES student(Sno),
FOREIGN KEY (cno) REFERENCES course(cno)
);
向表中插入數(shù)據(jù):
# 向?qū)W生表S中插入數(shù)據(jù)
INSERT INTO student
(Sno,Sname,Sage,Ssex,Sdept)
VALUE
("10001","張三",20,'男','計(jì)算機(jī)'),
("10002","李梅",19,'女','計(jì)算機(jī)'),
("10003","王五",18,'男','CS'),
("10004","小明",21,'男','計(jì)算機(jī)'),
("10006","黎明",18,'男','藝術(shù)表演'),
("10008","杰克",21,'男','計(jì)算機(jī)'),
("10005","小紅",22,'女','CS');
# 向課程表C中插入數(shù)據(jù)
INSERT INTO course
(Cno,Cname,Cpno,Ccredit)
VALUE
("1","離散數(shù)學(xué)",NULL,5),
("2","線性代數(shù)",'3',6),
("3","高等數(shù)學(xué)",NULL,4),
("4","數(shù)據(jù)結(jié)構(gòu)",'3',6),
("5","操作系統(tǒng)",'1',4),
("6","數(shù)據(jù)庫(kù)",'4',5);
# 向選課表SC中插入數(shù)據(jù)
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);
一、創(chuàng)建并調(diào)用如下的存儲(chǔ)過(guò)程。
1、 定義一個(gè)存儲(chǔ)函數(shù),按性別計(jì)算所有學(xué)生的平均年齡。
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、 編寫存儲(chǔ)過(guò)程,根據(jù)給定的學(xué)生學(xué)號(hào),計(jì)算該生的平均成績(jī)
delimiter //
create procedure avg_grade_cno1(in stu_cno int)
begin
select avg(grade) as '平均成績(jī)' from sc where Cno=stu_cno;
end//
delimiter ;
call avg_grade_cno1(1);
3、 創(chuàng)建存儲(chǔ)過(guò)程,能夠查詢出指定課程(課程名)的平均成績(jī),并用OUT參數(shù)返回結(jié)果。
delimiter //
create procedure avg_grade7(in stu_cno varchar(30),out avgsc1 decimal(6,4))
begin
select avg(grade) as '平均成績(jī)' from sc,course where course.Cname=stu_cno and course.Cno=sc.Cno;
end//
delimiter ;
set @avgsc1 = 60;
call avg_grade7('高等數(shù)學(xué)',@avgsc1);
select @avgsc1;
4、創(chuàng)建存儲(chǔ)過(guò)程p_Insertstu,實(shí)現(xiàn)向?qū)W生數(shù)據(jù)表中插入一個(gè)新同學(xué),并提供相應(yīng)的實(shí)參值(實(shí)參值由用戶自定)。
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','女','計(jì)算機(jī)');
select * from student;
二、創(chuàng)建觸發(fā)器。
1、創(chuàng)建觸發(fā)器,在學(xué)生表中刪除學(xué)生信息的同時(shí)將選課信息表中該學(xué)生的選課信息刪除,以確保數(shù)據(jù)的完整性;
#關(guān)閉安全模式
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、創(chuàng)建觸發(fā)器,在選課信息表中添加學(xué)生選課信息的同時(shí),增加學(xué)生表中該學(xué)生的選課數(shù)量信息,以確保數(shù)據(jù)的完整性;
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 //
完整sql文件:
鏈接:https://pan.baidu.com/s/1PD_mD9Q-uCNQPANq2TmFew?pwd=69ev
提取碼:69ev文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-489082.html
推薦一個(gè)b站講的不錯(cuò)的視頻:
mysql數(shù)據(jù)庫(kù)高級(jí)篇文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-489082.html
到了這里,關(guān)于Mysql數(shù)據(jù)庫(kù)實(shí)驗(yàn)報(bào)告--實(shí)驗(yàn)五 存儲(chǔ)過(guò)程和觸發(fā)器的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!