(2022级)成都工业学院数据库原理及应用实验六: SQL DML(增、删、改)

embedded/2024/11/25 16:31:57/

写在前面

1、基于2022级软件工程/计算机科学与技术实验指导书

2、成品仅提供参考

3、如果成品不满足你的要求,请寻求其他的途径

运行环境

window11家庭版

Navicat Premium 16

Mysql 8.0.36

实验要求

在实验三的基础上完成下列查询:

1、在科室表中增加一个二级科室,其科室编码为“10401”

2、在科室表中增加一个二级科室,其上级科室编码为“10600”。

3、在医生表中增加一个医生,要求其级别编码为7。

4、将“一级专家”诊疗费改为120。

5、将医生“万春”在2022年4月18日的值班时段调整为上午。

6、删除医生编号为‘D001’的值班记录。

7、删除医生‘朱强’在2022年4月18日的值班记录。

8、删除工作证号为“D016”的医生。

9、创建一个表work_count,包含两个属性工作证号、值班次数。使用子查询的形式将每个医生的工作证号、值班次数存入表work_count。从work_count查询出医生的工作证号、值班次数。

10、定义一个视图doctor_info,包含工作证号,医生姓名、科室编码、科室名称、医生级别编码、级别名称,其中工作证号来自Doctor表,科室编码来至department表,医生级别编码DoctorLevel表。使用该视图完成查询:查询医生姓名、科室名称、级别名称。

11、基于上题中定义的视图doctor_info,插入一个医生级别(7,‘测试1’),插入一个医生(’D020’,’测试医生’),观察是否成功,并思考产生这种结果的原因?

实验过程

1、在科室表中增加一个二级科室,其科室编码为“10401”

INSERT into department VALUES("10401","新增科室1","2",NULL);
SELECT * FROM department

546cc30d09024a45aebb0a741c8010c0.png

2、在科室表中增加一个二级科室,其上级科室编码为“10600”。

INSERT into department VALUES("12345","新增科室2","2",10600);
SELECT * FROM department

698a6241d8fe4ae487426738e709d06f.png

3、在医生表中增加一个医生,要求其级别编码为7。

SET FOREIGN_KEY_CHECKS = 0; --禁用外键
INSERT into doctor VALUES("1234","新增医生","123456","2022-2-2","7","躺平");
SET FOREIGN_KEY_CHECKS = 1; --重启外键
SELECT * FROM doctor

931f3bb28d2a4b8b83735d79c36da8f7.png

4、将“一级专家”诊疗费改为120。

UPDATE doctorlevel SET Drlv_fee="120" WHERE Drlv_no=1;
SELECT * FROM doctorlevel

5e749cd9810b4a93b010886729846165.png

5、将医生“万春”在2022年4月18日的值班时段调整为上午。

UPDATE doctor INNER JOIN schedule ON doctor.Dr_no=schedule.Dr_no SET Skd_seg=1 WHERE Dr_name="万春" AND Skd_Date="2022-4-18";
SELECT * FROM schedule

80602c2765904899b981dbceadb8ea92.png

6、删除医生编号为‘D001’的值班记录。

DELETE FROM schedule WHERE Dr_no="D001";
SELECT * FROM schedule

8bf3ece44fcf4f6b81564d73001a7f1b.png

7、删除医生‘朱强’在2022年4月18日的值班记录。

DELETE schedule FROM schedule INNER JOIN doctor ON schedule.Dr_no=doctor.Dr_no WHERE Dr_name="朱强" AND Skd_Date="2022-4-18";
SELECT * FROM schedule

ae3ab86ba03d4e63916cc4784fea5156.png8、删除工作证号为“D016”的医生。

SET FOREIGN_KEY_CHECKS = 0; -- 禁用外键
DELETE FROM doctor WHERE Dr_no = 'D016';
DELETE FROM schedule WHERE Dr_no = 'D016';
SET FOREIGN_KEY_CHECKS = 1; -- 重启外键
SELECT * FROM doctor;
SELECT * FROM schedule

3eefe739d4f64ca6ac3e13bcf0cc0c8d.png

459ec2c0c7ed422faa0be9895f44903a.png

9、创建一个表work_count,包含两个属性工作证号、值班次数。使用子查询的形式将每个医生的工作证号、值班次数存入表work_count。从work_count查询出医生的工作证号、值班次数。

CREATE TABLE `work_count` ( `Dr_id` CHAR ( 4 ) NOT NULL, `Skd_time` TINYINT NOT NULL, PRIMARY KEY ( `Dr_id` ) ) ENGINE = INNODB DEFAULT CHARSET = utf8mb3;
INSERT INTO work_count ( Dr_id, Skd_time ) SELECT
Dr_no,
count( Skd_seg ) 
FROM
SCHEDULE 
GROUP BYDr_no 
HAVINGCOUNT( Skd_seg )>=(SELECTMIN( Skd_seg ) FROMSCHEDULE );
SELECT * FROM work_count

e298f76cb45e4fb5b086247d302571b9.png

10、定义一个视图doctor_info,包含工作证号,医生姓名、科室编码、科室名称、医生级别编码、级别名称,其中工作证号来自Doctor表,科室编码来至department表,医生级别编码DoctorLevel表。使用该视图完成查询:查询医生姓名、科室名称、级别名称。

CREATE VIEW `doctor_info` AS SELECT
`doctor`.`Dr_no` AS `Dr_no`,
`doctor`.`Dr_name` AS `Dr_name`,
`doctorlevel`.`Drlv_no` AS `Drlv_no`,
`doctorlevel`.`Drlv_name` AS `Drlv_name`,
`department`.`Dept_no` AS `Dept_no`,
`department`.`Dept_name` AS `Dept_name` 
FROM((`doctor`JOIN `doctorlevel` ON ( `doctor`.`Drlv_no` = `doctorlevel`.`Drlv_no` ))JOIN `department` ON ( `doctor`.`Dept_no` = `department`.`Dept_no` ));
SELECTDr_name,Drlv_name,Dept_name 
FROMdoctor_info

7f789a1c4b614f5497b33532ae640575.png

11、基于上题中定义的视图doctor_info,插入一个医生级别(7,‘测试1’),插入一个医生(’D020’,’测试医生’),观察是否成功,并思考产生这种结果的原因?

--第一种1393报错:表示您不能通过一个连接视图(join view)修改超过一个基表
INSERT INTO doctor_info ( Dr_no, Dr_name, Drlv_no, Drlv_name, Dept_no, Dept_name )
VALUES( NULL, NULL, "7", "测试1", NULL, NULL);
INSERT INTO doctor_info ( Dr_no, Dr_name, Drlv_no, Drlv_name, Dept_no, Dept_name )
VALUES( "D020","测试医生",NULL, NULL, NULL, NULL);

f6ba5b58f49142a1b2ad129004d0d955.png

--第二种1423报错:表示您尝试插入数据到一个视图,但是视图对应的基表中有一个字段没有默认值,而且在插入操作中没有为该字段提供值。
INSERT INTO doctor_info ( Drlv_no, Drlv_name )
VALUES( "7", "测试1" );
INSERT INTO doctor_info ( Dr_no, Dr_name )
VALUES( "D020", "测试医生" );

b757322e809a496890b7e8be376b720b.png

插入失败,原因是:

视图在数据库中是一种虚拟表,它是由一个或多个实际表(基表)上的查询结果构成的。视图本身不存储数据,它只是展示基表数据的一种方式。视图只能查,不能增删改


http://www.ppmy.cn/embedded/12777.html

相关文章

课时101:正则表达式_基础实践_字符匹配

3.1.2 字符匹配 学习目标 这一节,我们从 基础知识、简单实践、小结 三个方面来学习 基础知识 简介 正则存在的根本就是对数据的匹配,而数据基本上都是有字符组成的,而正则表达式提供了非常多的字符匹配表达式,常见的表达式模式…

Redis篇:缓存更新策略最佳实践

前景: 缓存更新是redis为了节约内存而设计出来的一个东西,主要是因为内存数据宝贵,当我们向redis插入太多数据,此时就可能会导致缓存中的数据过多,所以redis会对部分数据进行更新,或者把他叫为淘汰更合适&a…

docker的安装以及docker中nginx配置

机器 test3 192.168.23.103 1机器初始化配置 1.1关闭防火墙,清空防火墙规则 systemctl stop firewalld iptables -F setenforce 01.2部署时间同步 yum install ntp ntpdate -y1.3安装基础软件包 yum install -y wget net-tools nfs-utils lrzsz gcc gcc-c make…

Stable Diffusion WebUI 使用 LoRA 调整风格——详细教程

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里,订阅后可阅读专栏内所有文章。 大家好,我是水滴~~ 本教程旨在深入探讨 LoRA 模型的奥秘,涵盖其基本概念、独特作用以及实操指南。我们将从下载和使用LoRA的步…

Qt实现XYModem协议(七)

1 概述 XMODEM协议是一种使用拨号调制解调器的个人计算机通信中广泛使用的异步文件运输协议。这种协议以128字节块的形式传输数据,并且每个块都使用一个校验和过程来进行错误检测。使用循环冗余校验的与XMODEM相应的一种协议称为XMODEM-CRC。还有一种是XMODEM-1K&am…

Typora使用的一些记录(自用)

Typora 是一个伪装成文本编辑器的浏览器。当你按下 Shift F12 快捷键或者右键检查元素时,页面会弹出一个基于 Chrome 的开发者工具栏。 1、Typora快捷键 标题(Ctrl1(2,3,4,5,6)) ps:分别是一级标题到六…

基于文件流操作文件系统

stream 文件流ScannerWriter遍历目录删除指定文件把目标文件复制为源文件小结 文件流 文件的内容本质上都是来自于硬盘,而硬盘由操作系统管理. 使用java来操作文件,就要用到java的api.这里涉及一系列的类: 字节流: InputStream和OutputStream是以操作字节为单位(二进制文件). …

项目经理面试的常见问题及回答技巧

关于项目经理的面试,很多人都会紧张,那么项目经理面试会遇到哪些常见问题呢?应如何应对呢?下面的一些关于项目经理面试问题及回答技巧,希望能对你有所帮助。 一、自我介绍 各位面试官好,我叫某某&#x…