数据库——SQL DDLDML使用

1.实验内容及原理

1. 在 Windows 系统中安装 VMWare 虚拟机,在 VMWare 中安装 Ubuntu 系统,并在

Ubuntu 中搭建 LAMP 实验环境。

2. 使用 MySQL 进行一些基本操作:

(1)登录 MySQL,在 MySQL 中创建用户,并对新建的用户赋予权限。

(2)创建并跳转到新的数据库,显示所有数据库和当前数据库。

(3)显示所有的表和查看表的属性。

(4)导入 emp loyees 和 sakila 两个样例数据库,对这两个数据库进行完整性检查,

对这两个数据库进行备份、导入与导出。

3. SQL DDL 使用

(1) 创建 DDL 脚本,包括创建、删除表,指定主键、候选键和外键;

(2)修改并展示表结构;

(3)创建、删除索引。

4. SQL DDL & DML 使用

(1)数据的增、删、查、改等操作

(2)掌握视图的创建、删除和更新

5. 简单查询

(1)使用 order by、group by、having 等子句;

(2)使用各种谓词;

(3)使用集合函数;

(4)在时间字段上查询。

6. 复杂查询

(1)嵌套子查询;

(2)多表连接查询,包括左连接、右连接、外连接、 自连接。

7. 创建存储过程、函数和触发器,调用创建的存储过程、函数,触动触发器。

8. 安装并使用 phpmyadmin。

2.实验步骤与分析

1. 自行在 Windows 系统中安装 VMWare 虚拟机,在 VMWare 中安装 Ubuntu 系统,在

Ubuntu 中安装 LAMP 步骤如下(也可使用安装菜单):

sudo apt-get install update

sudo apt-get install apache2

sudo apt-get install mysq l-server

sudo apt-get install php

2. 熟悉 MySQL 的基本操作步骤如下:

(1)进入 MySQL:mysq l -u root -p

(2)创建新用户:CREATE USER 'newuser'@' localhost' IDENTIFIED BY 'password';

(3)赋予权限:GRANT ALL PRIVILEGES ON * . * TO 'newuser'@' localhost';

(4)创建新的数据库:CREATE DATABASE newdbname;

(5)跳转到新创建的数据库:USE newdbname;3

(6)显示所有数据库和当前数据库:SHOW DATABASES; SELECT DATABASE();

(7)显示所有的表并查看表的属性:SHOW TABLES; DESCRIBE tabname;

(8)导入两个样例数据库

① 解压数据包:unzip test_db_master.zip

② 进入数据包目录:cd test_db_master

③ 导入 emp loyee 数据库:sudo sudo mysql -t < emp loyees.sql

④ 解压数据包:unzip sakila-db.zip

⑤ 进入数据包目录:cd sakila-db

⑥ 进入 MySQL,导入 sakila schema 数据:SOURCE /path/to/sakila-schema.sq l

⑦ 导入 sakila 数据:SOURCE /path/to/sakila-data.sq l

(9)对导入的两个数据库进行完整性检查

① 查看外键检查状态:show variables like ‘%foreign_key_checks% ’;

② 查看主键检查状态:show variables like ‘%unique_checks% ’;

③ 查看外键检查结果:select @@foreign_key_checks;

④ 查看主键检查结果:select @@unique_checks;

(10)数据库备份(以 employee 为例)

① 不导出任何数据,只导出数据库表结构:

mysqldump -u test_02 -p --no-data emp loyees> employees_bak1.sq l

② 只导出数据,而不添加 CREATE TABLE 语句:

mysqldump -u test_02 -p --no-create-info employees> emp loyees_bak2.sq l

③ 导出全部数据库:

mysqldump -u test_02 -p emp loyees> emp loyees_bak3.sq l

(11)导出和导入(以 sakila 为例)

① 导出为 TXT 文件:

select * from country into outfile '/your/file/path/country';

② 导入 TXT 文件:

load data infile '/your/file/path/country' into table country;

③ 导出为 CSV 文件:4

select * from country into outfile '/your/file/path/country.csv';

④ 导入 CSV 文件:

load data infile '/your/file/path/country.csv' into table country;

⑤ 导出为 xml 文件:

mysql  -u  test_02  -p  --xml  -e  'select  *  from  sakila.country'  >

/your/file/path/country.xml

3. SQL DDL 使用

(1)使用 create 语句创建项目所有的表;

(2)使用 alter 命令修改表结构,删除某个表中的“xxx ”字段;修改某个表中

的“xxx ”字段的类型为 char(2),该字段不能为空,默认值为“m”;

(3)添加类型为 char(2)的‘xxx ’字段数据,添加是否成功,如果失败分析

失败的原因并进行必要的操作使字段添加成功;

(4)修改某个表,添加类型为 varchar2(18)的字段,并添加 check 约束,要求该

字段的长度为 18,并且只能由数字组成,并且指定该字段为候选键;

(5)设置某个表中某个字段的 check 约束为大于 0;设置某个字段默认值为“未

审核 ”,设置某个 ”字段的 check 约束为“未审核 ”、“ 审核已通过 ”、“ 审核不通

过”;

(6)在某个表中创建索引;

(7)使用 describe 命令展示表结构。

4. SQL DDL & DML 使用

(1) 使用 insert 语句将数据插入到相应的表中;

(2) 使用 delete 语句删除表中有关联表外建对应的记录,能否成功删除,如

果不能请分析原因;

(3) 使用 update 语句更新外键数据,能否成功修改,如果不能请分析原因。;

(4) 创建视图;

(5) 对视图进行查询操作;

(6) 对表进行联合查询操作;

(7) 更新视图,分析更新操作可以执行成功或失败的原因。5

5. 简单查询

(1) 查询性别为“ 男 ”的所有学生的学号、姓名和班级号;(单表简单查询)

(2) 查询 xxx 表,获得性别为“女 ”的记录,结果按照班级 ID 降序排列;(order

by)

(3) 查询 xxx 表,按照年龄从小到大排序;(获取子串函数、order by)

(4) 查询学号以“2002 ”开头的学生信息,字段包括学号、姓名、班级号;(使用子

串函数)

(5) 查询学号中包含“01 ”的学生信息,字段包括学号、姓名、班级号;(like)

(6) 查询状态为“未审核 ”,且申请时间在 2013 年 9 月 4 日之后的请假申请

单的信息,包含申请时间为 9 月 4 日的申请单;(单表多条件查询)

(7) 查询审核状态为“未审核 ”和“ 审批已通过 ”两种类型的申请单 ID;(in)

(8) 查询时间在 2013 年 8 月 31 日和 2013 年 9 月 2 日之间所提交的申请单 ID,

请假原因; (between、时间)

(9) 查询 XXX 老师所教课程的的选课人次(一人选两门课程,算两人次);

(10) 查询 XXX 老师所教课程的的选课人数(一人选两门课程,算一人);(distinct)

(11) 查询 XX 老师对请假单审核不通过的请假原因与学生姓名;

(12) 统计每门课的学生的个数(集合函数);

(13)  查询选课人数超 过 3 人 的课程 号 , 并按课程 号 降序排列( group by,

having,order by …desc)。

6. 复杂查询

(1)查询审批通过人数最多的课程名称和教师姓名;

(2)查询选课人数最多和第二多的课程名称和任课老师姓名; (选做)

(3)查询只选了课程《算法设计》的学生姓名;

(4)查询选修了全部课程的学生姓名;

(5)查询选修了课程 3 的学生学号、姓名、身份证号;

(6)据学生学号将 xxx 表与 xxx 表做自然连接查询;

(7)据学号将 xxx 表与 xxx 表进行左连接查询,并解释这样做所具有的业务含 6

义;

(8)据学号将 xxx 表与 xxx 表进行右连接查询,并解释这样做所具有的业务含

义;

(9)总结自然连接、左连接、右连接查询在产生的结果上面有什么区别。

7. 创建并调用存储过程、函数和触发器

(1)创建并调用存储查询过程(以 emp loyee 为例)

① 创建一个查询存储过程:

> delimiter##

> create procedure select_manager(in fname varchar(20), in lname varchar(20))

-> begin

->select * from dept_manager natural join emp loyees where first_name = fname

and

last_name = lname;

->end

> ##

② 调用这个存储查询过程:call select_manager('Xiaobin','Spinelli');

(2)创建并调用函数(以 emp loyee 为例)

① 创建函数:

> delimiter ##

> create function title_num(title_name varchar(50)) returns int

> begin

> declare num int;

> select count(title) from titles where to_date > curdate() and title =

title_name group

by title into num;

> return num;

> end



> ##

set g lobal log_bin_trust_function_creators=1;

② 调用函数:select title_num("manager");7

(3)创建并调用触发器(以 emp loyee 为例)

① 查看表 dept_manager:select * from dept_manager;

② 创建新表 quit:create table quit (emp_no int, depr_no char(4), quit_date

date);

③ 创建触发器:

mysql> delimiter ##

mysql> create trigger after_ insert_ quit after insert on quit for each row

-> begin

-> update dept_ manager set to_ date = curdate( ) where emp_ no = 110039;

-> end

-> ##

④ 触发触发器: insert into quit values (110039, 'd001', curdate());

⑤ 查看新表 quit:select * from quit;

⑥ 再次查看表 dept_manager:select * from dept_manager;

8. 安装 phpmyadmin 步骤如下:

(1)安装 phpmyadmin:sudo apt-get install phpmyadmin

(2)安装 php-mbstring:sudo apt-get install php-mbstring

(3)安装 php-gettext:sudo apt-get install php-gettext

(4)编辑 php.ini: vim /path/to/php. ini 修改;extension=php-mbstring.so

(5)重启 Apache2:sudo /path/to/apache2 restart

(6)查看 IP 地址: ifconfig

(7)登录 phpmyadmin:从浏览器地址 your. ip.4.address/phpmyadmin

3.实验结果与总结

3. SQL DDL 使用

(1)使用 create 语句创建项目所有的表;

(测试用表,实验后续过程使用了另外创建的数据库,在相关部分会有提及)

(2)使用 alter 命令修改表结构,删除某个表中的“xxx ”字段;修改某个表中

的“xxx ”字段的类型为 char(2),该字段不能为空,默认值为“m”;

(如图,成功修改类型)

(3)添加类型为 char(2)的‘xxx ’字段数据,添加是否成功,如果失败分析

失败的原因并进行必要的操作使字段添加成功;

(如图,添加成功)

(4)修改某个表,添加类型为 varchar2(18)的字段,并添加 check 约束,要求该

字段的长度为 18,并且只能由数字组成,并且指定该字段为候选键。如下图所示,添加 check

约束成功。在添加候选键的过程中系统不断报错,但使用相同的句式添加主键成功。

(5)设置某个表中某个字段的 check 约束为大于 0;设置某个字段默认值为“未审核 ”,设置某个 ”字段的 check 约束为“未审核 ”、“ 审核已通过 ”、“ 审核不通过”;

(设置成功)

(6)在某个表中创建索引;

(7)使用 describe 命令展示表结构。

如图所示,使用 describe 命令成功。在实验的后续部分中,该命令也多次被用于查看表格属性,为数据的插入、查询等操作提供了极大的便利。

4. SQL DDL & DML 使用

(1) 使用 insert 语句将数据插入到相应的表中;

该语句在创建实验用表的过程中也多次被使用。

(2) 使用 delete 语句删除表中有关联表外建对应的记录,能否成功删除,如果不能请分析原因;

(成功删除)

(3) 使用 update 语句更新外键数据,能否成功修改,如果不能请分析原因。

修改成功。若不能修改,则原因可能在于更新数据后会破坏参照完整性。

(4) 创建视图;

(5) 对视图进行查询操作;

(视图创建及查询成功)

(6) 对表进行联合查询操作;

(7) 更新视图,分析更新操作可以执行成功或失败的原因。

更新成功。成功操作的原因可能在于更新操作没有破坏完整性,同时也没有超出相关列表的 check 约束范围。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/286436.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[密码学]ECC加密

椭圆曲线加密 Ellipse Curve Cryptography 椭圆曲线上的离散对数问题 Ellipse Curve Discrete logarithm Problem 椭圆曲线 注意积分公式的分母&#xff0c;椭圆曲线由此得名。这种曲线和椭圆一点不像。 离散对数&#xff1a; yg^x mod p,对于给定的g,x,p求y很容易&#…

JVM工作原理与实战(三):字节码文件的组成

专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、基础信息 1.Magic魔数 2.主副版本号 3.其他信息 二、常量池 1.案例解析 三、方法 1.方法介绍 2.案例解析 四、字段 五、属性 总结 前言 JVM作为Java程序的运行环境&…

【致远OA】获取指定人员的协同已办列表

接口说明 按人员编码获取所有待办事项&#xff08;V6.0接口更新:不在传入ticket&#xff0c;改为传memberId人员ID&#xff09; 兼容版本 since V7.0 请求方式 V6.0之前http请求方式&#xff1a;GET http://ip:port/seeyon/rest/affairs/done 如 http://127.0.0.1/seeyon/…

Builder建造者模式(对象创建)

Builder 链接&#xff1a;建造者模式实例代码 解析 目的 在软件系统中&#xff0c;有时候面临着“一个复杂对象”的创建工作&#xff0c;其通常由各个部分的子对象用一定的算法构成&#xff1b;由于需求的变化&#xff0c;这 个复杂对象的各个部分经常面临着剧烈的变化&…

深入理解C#中的隐式类型转换

深入理解C#中的隐式类型转换 在C#中&#xff0c;类型转换可以是显式的或隐式的。理解这些转换的工作原理对于编写高效、可维护的代码至关重要。本文将深入探讨C#中的隐式类型转换&#xff0c;特别关注赋值操作符&#xff08;&#xff09;在隐式转换中的角色&#xff0c;并对比C…

FL Studio 21最新版本for mac 21.2.2.3740中文解锁版2024最新图文安装教程

FL Studio 21最新版本for mac 21.2.0.3740中文解锁版是最新强大的音乐制作工具。它可以与所有类型的音乐一起创作出令人惊叹的音乐。它提供了一个非常简单且用户友好的集成开发环境&#xff08;IDE&#xff09;来工作。这个完整的音乐工作站是由比利时公司 Image-Line 开发的。…

三种方式在ASP.NET Core中实现代理功能请求获取数据的接口(以请求百度统计数据接口为例)

一、定义请求数据属性 TargetUrl参数是目标接口的URL&#xff0c;RequestDataArray参数是要发送的请求数据列表 //定义属性:TargetUrl参数是目标接口的URL&#xff0c;RequestDataArray参数是要发送的请求数据列表public class ToResponseBody{[JsonPropertyName("Target…

安装 Node.js、npm

安装 nodejs 安装Node.js的最简单的方法是通过软件包管理器。 Node.js官网&#xff1a;https://nodejs.org/en/download/ cd /usr/local/src/wget -c https://nodejs.org/dist/v18.16.0/node-v18.16.0-linux-x64.tar.xz xz -d node-v18.16.0-linux-x64.tar.xz tar -xf node…

使用react+vite开发项目时候,部署上线后刷新页面无法访问解决办法

说一下我这边的环境和使用的路由模式&#xff1a;vitereactBrowserRouter路由模式&#xff0c;所以如果你和我一样的话&#xff0c;可以试试我的这种解决办法&#xff0c;我是将项目打包后直接丢到服务器上的目录里面&#xff0c;然后配置nginx直接访问根目录。 我的nginx配置…

Android 模拟器检测

文章目录 普遍检测代码如下&#xff1a;推荐模拟器检测方法&#xff1a;设备信息检测代码&#xff1a;蓝牙检测代码&#xff1a;光传感器检测代码&#xff1a;CPU检测代码&#xff1a; 最近看到某客户端有一个检测模拟器的方法&#xff0c;我正常手机结果被判断是模拟器了&…

Python 自学(一) 之语言基础

目录 0. 前言 1. 声明python解释器 2. 变量的类型 type() id() P35 3. 类型转换 str() P37 4. 换行 r"" P40 5. 常用类型转换函数 P41 6. 特殊的运算符 // ** P42 7. 特殊的比较运算符 0 < a <100 P45 8. 函数输入 input() P51 9. print…

Windows使用IIS服务搭建WebDAV站点结合内网穿透公网访问

文章目录 1. 安装IIS必要WebDav组件2. 客户端测试3. cpolar内网穿透3.1 打开Web-UI管理界面3.2 创建隧道3.3 查看在线隧道列表3.4 浏览器访问测试 4. 安装Raidrive客户端4.1 连接WebDav服务器4.2 连接成功4.2 连接成功总结&#xff1a; 自己用Windows Server搭建了家用NAS主机&…

基于mediapipe的人体姿态估计模型——没有GPU依然速度飞起

关于人体姿态检测模型,我们前期也介绍过了很多相关的模型,比如基于Yolo-NAS的姿态检测以及基于YOLOv8的人体姿态检测,而人体姿态估计一直是计算机视觉任务中比较重要的一个模型。但是基于YOLO系列的人体姿态检测模型需要较大的算力,且很难在CPU模型上快速的运行。 基于medi…

【漏洞复现】OpenSSH ProxyCommand命令注入漏洞(CVE-2023-51385)

文章目录 前言一、漏洞背景二、漏洞详情三、影响范围四、漏洞验证 前言 OpenSSH存在命令注入漏洞&#xff08;CVE-2023-51385&#xff09;&#xff0c;攻击者可利用该漏洞注入恶意Shell字符导致命令注入。 一、漏洞背景 OpenSSH 是 SSH &#xff08;Secure SHell&#xff09…

经典目标检测YOLO系列(一)复现YOLOV1(3)正样本的匹配及损失函数的实现

经典目标检测YOLO系列(一)复现YOLOV1(3)正样本的匹配及损失函数的实现 之前&#xff0c;我们依据《YOLO目标检测》(ISBN:9787115627094)一书&#xff0c;提出了新的YOLOV1架构&#xff0c;并解决前向推理过程中的两个问题&#xff0c;继续按照此书进行YOLOV1的复现。 经典目标…

Qt(三):udp组播的发送与接收

1. 创建UDP套接字 使用QUdpSocket类创建一个UDP套接字。 udpSendnew QUdpSocket(this);udpRecenew QUdpSocket(this); 2. 绑定套接字 绑定套接字到一个本地地址和端口。可以使用bind()函数来完成。 如果要在组播中发送数据&#xff0c;可以将套接字绑定到一个通配符地址&#…

m1芯片电脑上的paragon15如何安装激活 m1芯片电脑上ntfs for mac如何安装

Paragon NTFS软件在M1芯片电脑上安装之后&#xff0c;最后一步会让我们“允许加载第三方内核扩展”&#xff0c;具体如下图所示。 图1&#xff1a;允许加载第三方内核扩展 按照图中提示“单击此处“&#xff0c;然后打开安全与隐私。接下来依次点击小锁标志进行解锁&#xff0c…

Abstract Factory抽象工厂模式(对象创建)

抽象工厂模式&#xff1a;Abstract Factory 链接&#xff1a;抽象工厂模式实例代码 解析 目的 在软件系统中&#xff0c;经常面临着“一系列相互依赖的对象工作”&#xff1b;同时&#xff0c;由于需求的变化&#xff0c;往往存在更多系列对象的创建工作。 如何应对这种变化…

EBDP:解锁大数据的奥秘✨

大数据时代已经来临&#xff0c;你是否也想掌握这门“显学”&#xff1f;&#x1f31f; EBDP&#xff0c;这个让众多专业人士趋之若鹜的认证&#xff0c;究竟有何魅力&#xff1f;今天就带你一探究竟&#xff01; &#x1f31f;EBDP&#xff1a;大数据的“敲门砖”&#x1faa…

无线路由器的五种工作模式:

1.Router&#xff0c;即无线路由模式&#xff0c;这也是我们最常用的一种工作方式&#xff0c;一般家里宽带连接&#xff0c;将宽带猫连接在无线路由的WAN口上&#xff0c;然后做拨号帐号设置&#xff0c;就用这个模式即可。 在Router&#xff08;无线路由&#xff09;模式下&a…