#数据库操作思路
#相关实验
<SQL语句简介>
<web安全SQL语句基本操作>
#数据库管理
#创建数据库
在与数据进行任何操作之前,需要创建一个数据库。数据库是数据的容器,用于存储和操作诸如表、数据库视图、触发器、存储过程等数据的数据集合。
例如创建一个名为mytestdb的数据库:
if not exists是语句的子句,可防止创建数据库服务器中已存在该数据库的错误。 执行此语句后,MySQL返回一条消息,通知新数据库是否已成功创建。
#显示数据库
show databases语句用于显示MySQL数据库服务器中的所有数据库。
在此MySQL服务器中有7个数据库,其中information_schema、mysql和performance_schema是安装MySQL时可用的默认数据库。
#选择要使用的数据库
在使用指定数据库之前,必须使用use语句告诉MySQL要使用哪个数据库。
例如使用数据库mytestdb:
接下来所有操作都将对当前数据库mytestdb产生影响。
#删除数据库
使用drop database语句对数据库中的所有数据和关联对象进行删除,且无法撤销。
例如删除数据库mytestdb:
再次执行显示数据库的语句以验证删除操作:
#表管理
#创建表
使用create table语句在数据库中创建一个新表。
create table语句的语法:
首先指定要创建的表的名称,表名在数据库中必须唯一。然后在column_list部分指定表的列表,字段的列用逗号分隔。最后需要为engine子句中的表指定存储引擎,如InnoDB、MyISAM、HEAP、EXAMPLE、CSV,其中InnoDB自MySQL 5.5之后成为默认存储引擎,之前使用MyISAM作为默认存储引擎。
使用以下语法在create table语句中为表定义列:
column_name指定列的名称,每列具有特定数据类型和大小;
not null或null表示该列是否接受null值;
default值用于指定列的默认值;
auto_increment表示每当将新行插入到表中,列的值会自动增加。
例如在示例数据库testdb中创建一个名为test的新表:
primary key(id)表示将表的id列设置为主键。
#更改表结构
使用alter table语句更改现有表的结构,可用来添加列、删除列、更改列的数据类型、添加主键、重命名表等。
首先在数据库testdb中创建一个名为test_table的新表:
#添加列
例如添加一个名为complete的新列:
#删除列
例如删除test_table表的complete列:
#重命名表
使用alter table语句重命名表。
例如将test_table表重命名为work_items表:
#删除表
使用drop table语句删除现有表。
drop table语句的语法:
drop table语句从数据库中永久删除一个表及其数据,每个表之间用逗号分隔;
temporary标志指定仅删除临时表;
restrict和cascade标志为未来版本的MySQL保留。
例如删除之前重命名的work_items表:
#数据导入
示例数据库下载地址:
https://www.yiibai.com/downloads/yiibaidb.zip
示例数据库由以下表组成:
customers:存储客户的数据;
products:存储汽车的数据;
productLines:存储产品类别数据;
orders:存储客户订购的销售订单;
ordersDetails:存储每个销售订单的订单产品数据项;
payments:存储客户订单的付款数据信息;
employees:存储所有员工信息以及组织结构;
offices:存储销售处数据,类似于各个分公司。
连接到MySQL服务器并创建数据库:
创建数据库,并将当前数据库切换到yiibaidb数据库下:
导入数据:
测试导入结果(查看所有表和从offices表查询数据):
如果能看到返回的各个分公司数据,说明已经成功将示例数据库yiibaidb导入到MySQL服务器了。
【——全网最全的网络安全学习资料包分享给爱学习的你,关注我,私信回复“资料领取”获取——】
1.网络安全多个方向学习路线
2.全网最全的CTF入门学习资料
3.一线大佬实战经验分享笔记
4.网安大厂面试题合集
5.红蓝对抗实战技术秘籍
6.网络安全基础入门、Linux、web安全、渗透测试方面视频
#数据查询
#select
select语句允许通过在select子句中指定逗号分隔列的列表,来查询表的部分数据。select语句的结果成为结果集,它是行列表,每行由相同数量的列组成。
select语句的语法:
select语句由以下几个子句组成:
select:之后是逗号分隔列,或*号的列表(表示返回所有列);
from:指定要查询数据的表或视图;
join:根据某些连接条件,从其他表中获取数据;
where:过滤结果集中的行;
group by:将一组行组合成小分组,并对每个小分组应用聚合函数;
having:过滤器,基于group by子句定义的小分组;
order by:指定用于排序的列的列表;
limit:限制返回行的数量。
例如查询员工的名字、姓氏和职位:
#select distinct
从表中查询数据时,可能会收到重复的行记录。为了删除这些重复行,可以在select语句中使用distinct子句。
select distinct语句的语法:
例如使用distinct子句从employee表中选择员工的唯一姓氏:
首先使用select语句从employee表中查询员工的姓氏:
可以看到上面的结果中有很多是重复的,如Bondur、Firrelli等。
接下来使用distinct子句做到相同的结果只显示一个:
如果列具有NULL值,且对该列使用distinct子句,MySQL将保留一个NULL值,并删除其他NULL值,因为distinct子句将所有NULL值视为相同的值。
例如在customers表中有很多行的state列是NULL值:
当使用distinct子句来查询客户所在的州时,将看到唯一的州和NULL值:
distinct子句在多列上的使用:这种情况下,MySQL将使用所有列的组合来确定结果集中行的唯一性。
例如从customers表中获取城市和州的唯一组合:
没有distinct子句,将查询到州和城市的重复组合:
#prepare
prepare语句利用客户端/服务端二进制协议,将包含占位符(?)的查询传递给MySQL服务器,有助于MySQL更快地执行查询。当MySQL多次执行查询时,因为prepare语句使用占位符(?),有助于避免SQL注入的问题。
prepare语句的语法:
prepare:准备执行的声明;
execute:执行由prepare语句定义的语句;
deallocate prepare:发布prepare语句。
使用prepare语句的示例:
首先使用prepare语句准备执行语句,使用select语句根据指定的产品代码从products表查询产品数据,然后使用?作为产品代码的占位符。接下来声明了一个产品代码变量@pc,并将其值设置为S10_1678。然后使用execute语句来执行代码产品变量@pc的准备语句,最后使用deallocate prepare来发布prepare语句。