实验1:数据库定义和操作语言

前言:
在进行实验之前你要先安装MySQL数据库管理系统。安装成功之后打开终端,输入 :mysql -u root -p。回车之后输入密码即可进入mysql界面。

实验1.1 数据库定义

1实验目的
理解和掌握数据库DDL语言,能够熟练地使用SQL DDL语句创建、修改和删除数据库、模式和基本表。
2实验内容和要求
理解和掌握SQL DDL语句的语法,特别是各种参数的具体含义和使用方法;使用SQL语句创建、修改和删除数据库、模式和基本表。掌握SQL语句常见语法错误的调试方法。
3实验重点和难点
实验重点:创建数据库、基本表。
实验难点:创建基本表时,为不同的列选择合适的数据类型,正确创建表级和列级完整性约束,如列值是否允许为空、主码和外码等。注意:数据完整性约束,可以在创建基本表时定义,也可以先创建表然后定义完整性约束;由于完整性约束的限制,被引用的表要先创建。
4实验过程

创建数据库:create database 数据库名;

创建一个名为test1的数据库.

显示创建的数据库:show databases;

编辑数据库:use 数据库名;

创建数据库表:create table 表名;

我创建了一个名为students的表,表中包含学好id(设置为int类型,非空,自加,主键)之后的类似设置,姓名name,年龄age,电话tel;

显示创建的表用:show tables;

显示创建的表的具体信息用:desc 表名;

在这里插入图片描述

向表中添加数据:insert into 表名 (列名1,列名2,……) values (对应列的数据);

查询表信息用:select * from 表名或者表名\G;

更新表中的数据:update 表名 set 列名=新数据 where 条件;

在这里插入图片描述

向表中添加一列用:alter table 表名 add 列名 类型;

在这里插入图片描述

修改列名用:alter table 表名 列名 modify 新列名;

对表进行重命名用:rename table 表名 to 新表名;

删除表中某列用:alter table 表名 drop 列名;

删除表中的数据:delete from 表名 where 条件;

删除整张表:drop table 表名;

删除整个数据库:drop database 数据库名;

创建模式:create schema 模式名;

显示模式用:show schemas;

删除模式:drop schema 模式名;

实验1.2 数据基本查询

1.实验目的
掌握SQL程序设计基本规范,熟练运用SQL语言实现数据基本查询,包括单表查询、分组统计查询和连接查询。
针对TPC-H数据库设计各种单表查询SQL语句、分组统计查询语句;设计单个表针对自身的连接查询,设计多个表的连接查询。理解和掌握SQL查询语句各个子句的特点和作用,按照SQL程序设计规范写出具体的SQL查询语句,并调试通过。
说明:简单地说,SQL程序设计规范包含SQL关键字大写、表名、属性名、存储过程名等标示符大小写混合、SQL程序书写缩进排列等编程规范。具体内容参见参考文献3。
3.实验重点和难点
实验重点:分组统计查询、单表自身连接查询、多表连接查询。
实验难点:区分元组过滤条件和分组过滤条件;确定连接属性,正确设计连接条件。
4.实验过程
首先创建三个数据库表:students,grade,xueji.然后向表中添加数据
在这里插入图片描述
(我之后修改了里面的列名和表名,具体见下一个截图)
添加数据后各表的信息:
在这里插入图片描述

(1)单表查询:

查询所有等级在7以上的学生:select * from sailors where rating > 7;

在这里插入图片描述
(2)分组统计查询:

使用group by语句:
按照rating来对sailors分组统计查询:

在这里插入图片描述
(3)连接查询:

多表连接查询:查询预定了一艘红色船或者绿色的水手:

实验1.3 数据高级查询

1.实验目的
掌握SQL嵌套查询和集合查询等各种高级查询的设计方法等。
2.实验内容和要求
针对自定义数据库,正确分析用户查询要求,设计各种嵌套查询和集合查询。
3.实验重点和难点
实验重点:嵌套查询。
实验难点:相关子查询、多层EXIST嵌套查询
4.实验过程
(1)嵌套查询:可以使用IN,EXIXT来实现嵌套查询

查询预订了103号船只的水手的名字(使用IN):

查询预订了103号船只的水手的名字(使用EXISTS):

在这里插入图片描述
(2)集合查询:

ANY语句:
查询等级比名为Horatio的水手还要高的水手:

在这里插入图片描述

ALL语句:
查询等级最高的选手:

在这里插入图片描述

实验1.4 数据更新

1.实验目的
熟悉数据库的数据更新操作,能够使用SQL语句对数据库进行数据的插入、修改、删除操作。
2.实验内容和要求
针对自定义数据库设计单元组插入、批量数据插入、修改数据和删除数据等SQL语句。理解和掌握INSERT、UPDATE和DELETE语法结构的各个组成成分,结合嵌套SQL子查询,分别设计几种不同形式的插入、修改和删除数据的语句,并调试成功。
3.实验重点和难点
实验重点:插入、修改和删除数据的SQL。
实验难点:与嵌套SQL子查询相结合的插入、修改和删除数据的SQL语句;利用一个表的数据来插入、修改和删除另外一个表的数据。
4.实验过程
(1)表中数据的修改:update 表名 set 列名=新数据 where 条件;
(2)把表中的数据复制到另一个表中:insert into 新表 select * from 旧表;

创建一个空表new_boats,并把boats当中的数据复制过来:

在这里插入图片描述
(3)利用一个表的数据更新另一个表的数据:update 表名 set 属性名=新数据 where exists(子查询);

把new_boats中的nid与boats中的bid相同的船只的颜色改成black:

在这里插入图片描述
(4)用一个表删除另一个表的数据

我们现在new_boats中插入一行(106,‘new’,‘white’),然后通过boats来删除它

在这里插入图片描述
(5)向表中批量插入数据,数据之间用逗号隔开insert into 表名 () values (数据1),(数据2),……;
在这里插入图片描述

实验1.5 视图

1.实验目的
熟悉SQL语言有关视图的操作,能够熟练使用SQL语句来创建需要的视图,定义数据库外模式,并能使用所创建的视图实现数据管理。
2.实验内容和要求
针对给定的数据库模式,以及相应的应用需求,创建视图、创建带WITH CHECK OPTION的视图,并验证视图WITH CHECK OPTION选项的有效性。理解和掌握视图消解执行原理,掌握可更新视图和不可更新视图的区别。
3.实验重点和难点
实验重点:创建视图。
实验难点:可更新的视图和不可更新的视图之区别, WITH CHECK OPTION的验证。
4.实验过程
(1)创建一个视图:create view 视图名 as select 表中某些列名 from 表名 where 限定条件;

创建一个视图,用于查询预订了船只且等级大于7的水手的名字以及他所预订的船只的名字

在这里插入图片描述
(2)更新视图

把名字为Lubber的水手的rating改为9,观察视图的变化,可见视图中对应的列也变为9


(3)WITH CHECK OPTION语句:该语句的作用是对更新视图的过程作了限制条件,所有对视图更新的操作都必须符合带WITH CHECK OPTION 语句的视图中where语句中的限制条件。

创建一个带有WITH CHECK OPTION语句的新视图view3,分别以把s_rating改为6和8尝试更新视图

在这里插入图片描述

改为6,如下:可见不能更新,因为6小于7;
改为8,如下:可以更新,因为8大于7。

在这里插入图片描述
(4)删除视图:drop view 视图名;
在这里插入图片描述

实验1.6 索引

1.实验目的
掌握索引设计原则和技巧,能够创建合适的索引以提高数据库查询、统计分析效率。
2.实验内容和要求
针对给定的数据库模式和具体应用需求,创建唯一索引、函数索引、复合索引等;修改索引;删除索引。设计相应的SQL查询验证索引有效性。学习利用EXPLAIN命令分析SQL查询是否使用了所创建的索引,并能够分析其原因,执行SQL查询并估算索引提高查询效率的百分比。要求实验数据集达到10万条记录以上的数据量,以便验证索引效果。
3.实验重点和难点
实验重点:创建索引。
实验难点:设计SQL查询验证索引有效性。
4.实验过程

创建一个普通索引:CREATE INDEX index_name ON table_name (column_list)

在这里插入图片描述

创建一个唯一索引:CREATE UNIQUE INDEX index_name ON table_name (column_list)
通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。

发布了11 篇原创文章 · 获赞 2 · 访问量 138

猜你喜欢

转载自blog.csdn.net/sinat_40875078/article/details/104098856