【MySQL】数据库课程实验
数据定义
#mysql --version 查版本号
#mysql -uroot -p #登录
show databases; #查询当前服务存在的数据库
#create database test ; #创建SQL数据库
use test;
drop table if EXISTS JS,Course,SK;
#建表
create table JS(
Tno CHAR(7),
Tname CHAR(10),
Tsex CHAR(2),
Birthday DATE,
Dept CHAR(20),
Sid CHAR(18)
);
create table Course(
Cno CHAR(10),
Cname CHAR(20),
Credit TINYINT,-- 短整形
Property CHAR(10),
Hours INT
);
create table SK(
Tno CHAR(7),
Cno CHAR(10),
Hours INT
);
#插入数据
insert into JS (Tno,Tname,Tsex,Birthday,Dept,Sid) VALUES ('T001', '刘薇', '女', '1971-3-20', '电信', '551021197103203121'),
('T002', '张骐劲', '男', '1963-7-13', '数理', '32010119630713318X'),
('T003', '李子文', '女', '1973-9-15', '外语', '461031197309153829'),
('T004', '江海防', '女', '1960-2-18', '社科', '560102196002185623'),
('T005', '李铁', '男', '1977-10-11', '数理', '230103197710118632'),
('T006', '吴天一', '男', '1962-4-23', '电信', '320104196204237516'),
('T007', '赵志华', '男', '1968-8-27', '社科', '321102196808277214'),
('T008', '钱进', '男', '1980-7-10', '电信', '570102198007103452'),
('T009', '孙星南', '女', '1981-3-2', '外语', '110102198103024125');
insert into Course (Cno,Cname,Credit,property) VALUES ('01010101', '大学英语1', 4, '考试'),
('01010102', '普通物理1', 4, '考试'),
('01010103', '高等数学1', 6, '考试'),
('01010104', '形势政策', 2, '考查'),
('01010105', '计算机基础', 4, '考查');
insert into SK (Tno,Cno,Hours) VALUES ('T001', '01010105', 64),
('T002', '01010102', 64),
('T009', '01010101', 64),
('T004', '01010104', 32),
('T005', '01010103', 96),
('T006', '01010105', 64),
('T003', '01010101', 64);
alter table SK add Type char(4);
alter table SK change Hours Hours Smallint;
alter table Course drop Hours;
-- 4.1
drop table if EXISTS students;
#建表
create table students(
SNO CHAR(10) NOT NULL,
SNAME CHAR(8) NOT NULL,
AGE NUMERIC(3,0),
SEX CHAR(2),
BPLACE CHAR(20),
Polity CHAR(20),
primary key(SNO)
);
insert into students (SNO,SNAME,SEX,AGE,BPLACE,Polity) VALUES ('S001', '刘薇', '女','22', '1997-3-20', '团员'),
('S002', '张骐劲', '男','20', '1999-7-13', '团员'),
('S003', '李子文', '女','22', '1997-9-15', '党员'),
('S004', '江海防', '女','19','2000-2-18', '团员');
-- 4.2
alter TABLE JS ADD ADDR char(50);
-- 4.3
-- 根据现有表建立
drop table if EXISTS GRIL,score,js1;
create table GRIL SELECT SNO,SNAME,AGE FROM students;
-- 4.4
create table score(
SNO CHAR(10),
CNO CHAR(10),
score NUMERIC(6,0)
);
insert into score (SNO,CNO,score) VALUES ('S001', '01010105', 64),
('S002', '01010102', 64),
('S003', '01010101', 64),
('S004', '01010104', 32);
-- 5.1
create table js1 SELECT * FROM JS;
create UNIQUE INDEX I_js_sid ON js1(Sid);
-- 5.2
create UNIQUE INDEX I_cource_xf ON Course(Cno,Credit);
数据操纵
SHOW DATABASE;
USE test;
SELECT SNAME,BPLACE FROM students WHERE SEX='男';
SELECT Tsex,count(Tno) FROM JS group by Tsex;
SELECT SNO,SNAME,AGE FROM students WHERE AGE>=20 and AGE<=23 ORDER BY AGE;
-- 1-4
SELECT SNAME FROM students WHERE AGE>=(SELECT AVG(AGE) FROM students);
-- 1-5
select SNAME,students.SNO,Course.Cname,score.score
from students,Course,score
where score.score<60 and students.SNO=score.SNO and score.Cno=Course.Cno;
-- 1-6
SELECT JS.Tno,Tname,Tsex,Birthday,Dept,Sid
from JS,SK where JS.Tno=SK.Tno and SK.Cno='01010105';
-- 1-7
SELECT Tname,Birthday,Cname,Hours
from JS,SK,course
where JS.Birthday<'1972-1-1' and JS.Tno=SK.Tno and SK.Cno=course.Cno;
-- 1-8
select * from JS where JS.Tno not in (select JS.Tno from JS,SK where JS.Tno = SK.Tno);
-- 2-1 在ex1中已做
insert into students (SNO,SNAME)values('S666','小坤');
insert into JS (Tno,Tname) values ('1476','李映雪');
-- 2-3 已存在
-- 3-1
update students set AGE=AGE+1;
update score set score=score+5 where Cno='01010105';
update score set score = 0 where Sno='S004';
-- 4-1
drop from JS where DATEDIFF('2019-11-20',Birthday)>60*365;
-- 为score表添加外键
-- alter table score add foreign key(SNO) REFERENCES students(SNO);
-- 采用级联删除
alter table score drop foreign key score_ibfk_1;
DELETE from students where SNO='S001';
DELETE from score where SNO='S001';
-- 创建视图
-- CREATE VIEW op_age(Tno,Tname) AS
-- SELECT Tno,Tname FROM JS;
-- DROP VIEW op_age;
-- 1-3
-- SELECT Tno,Tname,DATEDIFF('2019-11-20',Birthday)/365 Age FROM JS
-- WHERE DATEDIFF('2019-11-20',Birthday)>=20*365 and DATEDIFF('2019-11-20',Birthday)<=50*365
-- ORDER BY Birthday DESC;#年龄升序=生日降序
-- 1-4
-- SET @avg=0;
-- SELECT @avg:=AVG(DATEDIFF('2019-11-20',Birthday)/365) Age FROM JS;
-- SELECT Tno,Tname,DATEDIFF('2019-11-20',Birthday)/365 Age FROM JS
-- WHERE DATEDIFF('2019-11-20',Birthday)>=@avg * 365;
数据约束
show databases;
-- 主键
alter table js add PRIMARY KEY(Tno);
-- 非空
alter table js modify Tname varchar(10) NOT NULL;
-- 限制取值
alter table js add CONSTRAINT c_Tsex CHECK (Tsex in ('男','女'));
-- 唯一
alter table js add UNIQUE(Sid);
-- Course
alter table course add PRIMARY KEY(Cno);
alter table course modify Cname varchar(20) NOT NULL;
alter table course add CONSTRAINT c_Credit CHECK (Credir>0);
-- 默认值
alter table course modify property varchar(10) DEFAULT '必修';
-- SK
alter table SK add primary key(Tno,Cno);
-- 外码
alter table SK add foreign key(Tno) references js(Tno);
alter table SK add foreign key(Cno) references course(Cno);
alter table sk add CONSTRAINT c_hours CHECK (hours>0);#限制
数据库编程
-- 1-1 最高分
SELECT students.SNO,students.SNAME,Course.Cname,score
FROM score,students,Course
where students.SNO=score.SNO and Course.Cno=score.Cno
ORDER BY score DESC limit 1;#降序排取第一个
-- 最低分
SELECT students.SNO,students.SNAME,Course.Cname,score
FROM score,students,Course
where students.SNO=score.SNO and Course.Cno=score.Cno
ORDER BY score ASC limit 1;
-- 建立班级表
drop table if EXISTS class,class_student;
create table class(
Bno varchar(4),
Bname varchar(20)
);
create table class_student(
Sno char(10),
Bno varchar(4)
);
insert into students (SNO,SNAME,AGE,SEX,BPLACE,Polity) VALUES ('8103','张三',20,'男','1999-07-07','团员'),('8104','李芬',21,'女','1998-01-06','党员');
insert into class values('100','一班');
insert into class_student (Sno,Bno) VALUES ('8103','100'),('8104','100');
-- 1-2
select class.Bname, students.SNO,students.SNAME,students.SEX,students.BPLACE,students.Polity
from class,class_student,students
where class.Bno = 100 and class_student.Sno = students.SNO;
-- 1-3
drop table students;
create table students(
SNO CHAR(10) PRIMARY KEY NOT NULL,
SNAME CHAR(8) NOT NULL,
AGE NUMERIC(3,0),
SEX CHAR(2),
BPLACE CHAR(20),
Polity CHAR(20) DEFAULT '群众'
);
insert into students (SNO,SNAME,AGE,SEX,BPLACE,Polity) VALUES ('8103','张三',20,'男','1999-07-07','团员'),('8104','李芬',21,'女','1998-01-06','党员');
insert into students (SNO,SNAME) VALUES ('8101','张三丰'),('8102','李四');
select * from students;
-- 1-4
insert into students(SNO,SNAME,AGE,SEX,BPLACE) values('8105','小鬼',20,'男','1999-09-08');
insert into score (SNO,CNO,score) values ('8103','01010101',70),('8104','01010101',50);
-- 查询
SELECT avg(score) AVG,Course.Cname,class.Bname
FROM score,students,Course,class,class_student
where Course.Cno=score.CNO and class.Bno=class_student.Bno
and class.Bno=100 and class_student.Sno = students.SNO
and class_student.Sno=score.SNO;
-- 1-5
/*
CASE 属性
WHEN 条件1 THEN 结果1
WHEN 条件2 THEN 结果2
ELSE 其他结果
END
*/
SELECT score,(CASE score.CNO WHEN 1 THEN Course.Cname ELSE Course.Cname END) Cname,class.Bname
FROM score,students,Course,class,class_student
where Course.Cno=score.CNO and class.Bno=class_student.Bno
and class.Bno=100 and class_student.Sno = students.SNO and class_student.Sno=score.SNO;
-- 1-6
SELECT students.SNAME,
(case
when score < 60 then '不及格'
when score BETWEEN 60 AND 90 then '良好'
else '优秀'
end) Level,Course.Cname,class.Bname
FROM score,students,Course,class,class_student
where Course.Cno=score.CNO and class.Bno=class_student.Bno
and class.Bno=100 and class_student.Sno = students.SNO and class_student.Sno=score.SNO;
-- 存储过程的创建、调用
alter table students add class INT DEFAULT 1;#为学生表添加班级信息,默认1班
-- 创建
drop procedure if EXISTS stuscoreinfo;
delimiter $$ #将语句的结束符号从分号;临时改为两个$$(可以是自定义)
create procedure stuscoreinfo()
BEGIN
select class,SNAME,SEX,Cname,score
from students,course,score
where students.SNO = score.SNO and course.CNO = score.CNO;
END$$
delimiter ; #将语句的结束符号恢复为分号
# drop procedure p_name;#删除
-- 调用
call stuscoreinfo();
drop procedure if EXISTS stu_info;
delimiter $$
create procedure stu_info(IN s_sno varchar(10))
BEGIN
select * from students
where s_sno = students.SNO;
END$$
delimiter ;
call stu_info('8101');
/*
默认情况下,存储过程和默认数据库相关联,如果想指定存储过程创建在某个特定的数据库下,那么在过程名前面加数据库名做前缀;
在定义过程时,使用DELIMITER $$ 命令将语句的结束符号从分号 ;
临时改为两个$$,使得过程体中使用的分号被直接传递到服务器,而不会被客户端(如mysql)解释。
*/
-- 1-3
drop procedure if EXISTS stu_age;
delimiter $$
set @age = 0;
create procedure stu_age(IN s_sno varchar(10),OUT age INT)
BEGIN
select DATEDIFF('2019-11-20',BPLACE)/365 Age from students
where s_sno = students.SNO;
END$$
delimiter ;
call stu_age('8103',@age);
-- 1-4.5.6
call stuscoreinfo();
call stu_info('8101');
call stu_age('8103',@age);
-- 1-7
show procedure status;
-- 1-8
drop procedure stuscoreinfo;
-- 补充班级
insert into class values('101','二班');
insert into class values('102','三班');
insert into class_student (Sno,Bno) VALUES ('S002','101'),('S003','101'),('S004','102');
-- 自定义函数
delimiter $$
create procedure fun_sumscores()
BEGIN
select class.Bname,Course.Cname,avg(score) AVG
from class,score,class_student,Course
where class.Bno=class_student.Bno and class_student.Sno=score.Sno and Course.Cno=score.Cno
group by Course.Cname,class.Bno;
END$$
delimiter ;
DELIMITER $$
create function fun_sumscores() returns int deterministic
begin
declare c int;
SELECT avg(score) from score into c;
return c;
END $$
DELIMITER ;
select fun_sumscores();
-- 1-2
delimiter $$
create function fun_sumscores1(in_class VARCHAR(10),in_cno VARCHAR(10)) returns int deterministic
begin
declare c int;
SELECT sum(score) from score,class_student
where cno = in_cno and in_class = class_student.Bno
and class_student.Sno = score.SNO into c;
return c;
END $$
DELIMITER ;·
select fun_sumscores1('100','01010101');
-- 1-3
DELIMITER $$
create function fun_sumscores2(in_sname VARCHAR(10)) returns int deterministic
begin
declare c int;
SELECT count(*) from students where sname=in_sname into c;
return c;
END $$
DELIMITER ;
select fun_sumscores2('李浩');
/*
mysql查看存储过程函数
查询数据库中的存储过程和函数
select `name` from mysql.proc where db = 'xx' and `type` = 'PROCEDURE' //存储过程
select `name` from mysql.proc where db = 'xx' and `type` = 'FUNCTION' //函数
show procedure status; //存储过程
show function status; //函数
查看存储过程或函数的创建代码
show create procedure proc_name;
show create function func_name;
查看视图
SELECT * from information_schema.VIEWS //视图
SELECT * from information_schema.TABLES //表
查看触发器
SHOW TRIGGERS [FROM db_name] [LIKE expr]
SELECT * FROM triggers T WHERE trigger_name=”mytrigger” \G
*/
【MySQL】数据库课程实验的更多相关文章
- Javaweb 第5天 mysql 数据库课程
MySQL数据库课程 两日大纲 ● 数据库的概念.MySQL快速入门.SQL语言简介 ● 数据库操作.表操作.数据记录操作.数据类型和约束 ● 查询 ● 多表关系.多表连接查询 ● 视图 ● 数据备份 ...
- JAVA程序对MYSQL数据库加锁实验
什么是脏读,不可重复读,幻读 1. 脏读 :脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据. 2. 不可重 ...
- MySQL数据库小实验
实验1 1.创建数据表 CREATE TABLE guest( Accounts ) NOT NULL, Details ) NOT NULL, Date ) NOT NULL, ,), Class ...
- C语言连接MySQL数据库(课程设计总结)
刚结束课程设计,也预示着假期立即就要到来了.本次课程设计并不算难,无非就是让做一个XXX系统,实现用户的注冊.登录.菜单管理.超级用户等等一些功能,到如今为止已经做过好几个了,所以基本流程都熟悉了! ...
- MySQL实验准备(二)--Python模拟数据(MySQL数据库)
Python模拟数据(MySQL数据库) 数据模拟 目的:模拟多个表的插入和查询数据的模拟,再通过基准测试脚本测试服务器性能和收集数据,仿真模拟. 备注: 如果需要基础的python环境,可以查看&l ...
- MySQL数据库运维课程
MySQL数据库运维课程 http://www.dataguru.cn/article-4834-1.html?union_site=comm100 课程大纲 第一课:机器选型.系统规划 第二课:安装 ...
- MySQL数据库实验:任务一 创建数据库和表
目录 任务一 创建数据库和表 [实训目的与要求] [实训原理] [实训步骤] 一.熟悉MySQL环境 二.利用MySQL命令行窗口创建数据库及表 三.利用界面工具创建数据库及表 任务一 创建数据库和表 ...
- mysql数据库优化课程---18、mysql服务器优化
mysql数据库优化课程---18.mysql服务器优化 一.总结 一句话总结: 1.四种字符集问题:字符集都设置为utf-82.slow log慢查询日志问题3.root密码丢失 1.mysql存在 ...
- mysql数据库优化课程---17、mysql索引优化
mysql数据库优化课程---17.mysql索引优化 一.总结 一句话总结:一些字段可能会使索引失效,比如like,or等 1.check表监测的使用场景是什么? 视图 视图建立在两个表上, 删除了 ...
随机推荐
- VB.NET 与 SAP RFC连接问题点
与SAP RFC连接,电脑上必须要安装SAP软件,否则会报错ActiveX 输入工单号,无法带出SAP内接口RFC信息. 确认原因为:RFC接口需求的工单参数需要在前面加两位00,例如:1000541 ...
- PHP函数preg_match()
部分内容来自:http://www.nowamagic.net/librarys/veda/detail/1054 preg_match — 进行正则表达式匹配. 语法:int preg_match ...
- Python进阶函数
一.函数的动态参数 之前我们说过了传参, 如果我们需要给一个函数传参, 而参数又是不确定的. 或者我给一个函数传很多参数, 我的形参就要写很多, 很麻烦, 怎么办呢. 我们可以考虑使用动态参数. 动态 ...
- Mysql数据一般问题
数据插入中文全部变为???问题: 1.停止Mysql服务: 2.修改C:\Program Files (x86)\MySQL\MySQL Server 5.5\My.ini default-chara ...
- NOIP模拟测试25
这次考试后面心态爆炸了...发现刚了2h的T2是假的之后就扔掉了,草率地打了个骗分 T1只会搜索和m=0 最先做的T3,主要是发现部分分很多,当时第一眼看上去有87分(眼瞎了). 后来想了想,感觉一条 ...
- Birt报表
研究了两天终于发现开始学会了BIRT报表的开发流程. 第一步:到http://www.eclipse.org/downloads/下载 Eclipse IDE for Java and Report ...
- 『图论』有向图强连通分量的Tarjan算法
在图论中,一个有向图被成为是强连通的(strongly connected)当且仅当每一对不相同结点u和v间既存在从u到v的路径也存在从v到u的路径.有向图的极大强连通子图(这里指点数极大)被称为强连 ...
- Kubernetes(k8s)集群安装
一:简介 二:基础环境安装 1.系统环境 os Role ip Memory Centos 7 master01 192.168.25.30 4G Centos 7 node01 192.168.25 ...
- Linux软件包管理和磁盘管理实践
一.自建yum仓库,分别为网络源和本地源 本地yum仓库的搭建就是以下三个步骤: 创建仓库目录结构 上传相应的包到目录下,或者直接挂载光盘也行,如果挂载光盘,第三步就可以省略,因为光盘默认里有repo ...
- js获取文件里面的所有文件名
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...