day36-Mysql相关使用

MySQL

MySQL简介

  • ​ MySQL是一个关系型数据库管理系统
  • ​ 由瑞典MySQLAB公司开发,目前属于Oracle旗下产品
  • ​ 是WEB应用中最好的RDBMS(关系数据库管理系统))应用软件
  • ​ 官网https://www.mysql.com/
  • ​ 支持结构化查询语言SQL
什么是数据库
	数据库是按照数据结构来组织、存储和管理数据的仓库

什么是关系型数据库
	建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据
	
关系型数据库相关术语
    数据库:数据库是一些关联表的集合
    数据表:类似一个简单的电子表格
    主键:主键是唯一的,一个数据表中只能包含一个主键。
    外键:外键用于关联两个表
    索引:使用索引可快速访问数据库表中的特定信息,类似于书籍的目录

MySQL-Front简介

​ MySQL-Front是一款小I巧的MYSQL图形化管理工具
​ phpStudy套件中已经集成了MySQL-Front

在这里插入图片描述

进入MySQL-Front管理主界面
点击MySQL管理器,选择MySQL-Front菜单,点击属性----输入用户名密码即可登录

在这里插入图片描述

SQL

SQL简介
    SQL全称是StructuredQueryLanguage,结构化查询语言
    是一种数据库查询和程序设计语言
    用于存取数据以及查询、更新和管理关系型数据库系统
    SQL语言大小写不敏感
 
SQL具有数据定义、数据操纵和数据控制的功能
    1.数据定义语言DDL(DataDefineLanguage)
    	通过CREATE,ALTER和DROP实现创建新表或修改、删除表
    2.数据查询语言DQL(DataQueryLanguage)
    	通过SELECT、WHERE,ORDERBY,GROUPBY和HAVING实现数据的查询
    3.数据操作语言DML.(DataManipulation Language)
    	通过INSERT、UPDATE和DELETE实现数据的添加、修改和删除
    4.数据控制语言DCL(DataControl Language)
    	通过GRANT或REVOKE实现权限控制
SQL数据类型
SQL的数据类型大致可以分为三类:数值、日期/时间和字符串类型
    1.常用数值类型
    	INTEGER、SMALLINT、DECIMAL
    2.常用日期/时间类型
    	DATETIME、DATE、TIME
    3.常用字符串类型
    	VARCHAR、TEXT
创建数据库
CREATE DATABASE 数据库名;

示例:

CREATE DATABASE IFNO TEXISTS myDBD EFAULT CHARSET utf8;
   
   	如果数据库不存在则创建数据库
    创建myDB数据库,并设定编码集为utf8

选择数据库语法
	USE数据库名;
	示例:
		USE myDB;
		
删除数据库语法
	DROP DATABASE  数据库名;
	示例:
		drop databse if exist myDB;
		如果数据库存在则删除数据库myDB
创建表
CREATETABLE 表名 (字段名字段类型);

示例:

CREATE TABLE IF NOT EXISTS admin(
id INT UNSIGNED AUTO_INCREMENT,
name VARCHAR(5O) NOT NULL,
pwd VARCHAR(32) NOT NULL,
PRIMARY KEY(id)
);

设置字段的属性为NOT NULL,该字段的数据输入为空时报错
AUTO_INCREMENT定义列为自增的属性
PRIMARY KEY关键字用于定义列为主键

删除表语法
	drop table 数据表名;
	示例:
		drop table if exists admin;
		如果数据表存在则删除表admin
插入数据/增加一条数据
insert into table_name (name1, name2) values (value1, value2);

示例:

insert into admin(name, pwd) values('admini', '123456');
	如果数据是字符型或日期型,必须使用单引号或者双引号
查询数据
select *[列名] from table_name [where 条件];

示例:

select * from admin;

select name,pwd from admin;

select name from admin name='admini';

select name from admin name='admini' and pwd='123456';
修改数据
update 表名 set 列名1=值1, 列名2=值2 [where 条件]; 

示例:

update admin set pwd='ice' where id = 1;
删除数据
delete from 表名 [where 条件];

示例:

delete from admin where id =2;
	
如果没有指定 where 条件,则删除所有记录 

查询示例练习:

环境pikachu靶场的数据库pikachu;

	select * from member where sex = 'boy';

    select * from member where id  >=1;
    select * from member where id  !=1;
    select * from member where id  <>1;

    select * from member where  id in (1,3,5);
    select * from member where  id not in (1,3,5);

    select * from member where id between 3 and 6;

    select *  from member where id >=4 and sex='boy';

    select *  from member where id >=4 or sex='boy';

    select * from member where username like '%c';

    select * from member where username like '_u%'';

SQL注入

SQL注入利用Web应用对后台数据库查询语句处理时存在的安全漏洞
	设计程序时忽略了对某些字符串的检查
	原本程序要执行的代码,拼接了用户输入的数据(嵌入指令)

SQL注入攻击流程

第一步:注入探测
    自动方式:使用web渗透测试工具,自动探测
    手动方式:手工构造SQL注入测试语句
    
·第二步:信息获取
    环境信息:数据库类型,数据库版本,操作系统版本,用户信息等
    数据库信息:数据库表,表字段,字段内容等(加密内容破解)
    
第三步:获取权限
	获取操作系统权限:通过数据库执行shell,上传木马

SQL注入常用函数

查询MySQL上有哪些数据库
	show  databases;
选择数据库
	use 库名;     
	例如:use pichachu;
查看当前数据库中有那些表
	show tables;
查看表中的内容
	select * from [库名.]表名;
	示例:
		select * from member;	
数据筛选
	select * from [库名.]表名 where 条件;
	
	select username,sex,phonenum,email from member where sex='girl';
比较运算符:
= 等于
!=、<>  不等于
>、>=   大于或大于等于   用于数值
<、<=	小于或小于等于  用于数值
in、not in   在  不在
between     在两值之间
or  或
and  与
	多个条件时,通过逻辑操作进行组合(and优先级高于or)
	
	select id,username from member where sex='girl' or id<3;
使用like语句实现像是性检查
	通配符 _ 代替单个不确定字符, % 代替0~N个字符
	
select username,sex,address from member where address like 'nba%';
mysql注释分为单行注释和多行注释

#   #注释内容
--  -- 注释内容,杠杠后需要加一个空格
/*......*/    /*注释多行内容*/
select database();    #当前所在数据库

length(s)				#字符串的长度

substr(string,n ,len)    #截取字符创的长度为len 从n的位置开始

concat(str1, str2, str3)  #s1,s2,s3等多个字符串合并为一个字符串

group_concat()           #同一组多个字符串合为一个字符串

ascii(s) ord(s)          #返回字符串的ascii值
hex(s)					 #将字符串转化为16进制


if(a>b,a+1, b+1)         #表达式成立执行a+1, 否则执行b+1
sleep(n)				 #暂停n秒
rang()				     #返回0到1的随机数
load_file()              #读取文件,并返回文件内容secure_file_priv=

示例:

select username,length(username) from member;
select username,substr(username,3,1) from member;
select username,left(username,2) from member;

在这里插入图片描述

select concat(username,address) from member;
select username,address,concat(username,address) from member;

在这里插入图片描述

select username,address from member;
select group_concat(username,address) from member;

在这里插入图片描述

select username, ascii(username) from member;  #判断是username的第一个字符

select username, ascii(substr(username,2,1)) from member;

在这里插入图片描述

select username, hex(username) from member;

在这里插入图片描述

version()                #返回数据库的版本号
database()				 #返回当前数据库名
user()                   #返回当前用户   system_user()
@@datadir				 #返回数据库路径


select version();
select database();
select user();
select @@datadir;

在这里插入图片描述

select * from member where id = if(1=1,3,5);
select * from member where id = if(1=2,3,5);

在这里插入图片描述

select * from member where id=3 and sleep(5);         # sleep(n):暂停n秒 返回值是0

select rand();                             #返回0-1之间的随机数

在这里插入图片描述

select * from member order by  phonenum;  -- 从小到大排序以phonenum进行排序
select * from member order by  1;         -- 按ID进行排序

在这里插入图片描述

select * from member union select 1,2,3,4,5,6,7;

select *,8 from member union select 1,2,3,4,5,6,7;

select union 在联合注入查询的时候,当两张表的字段一样多时,不会报错直接就显示在一样了,字段不一样多时,会报错,无法显示在一样,可以添加一个数字字段来解决报错。

当联合查询时前面的数据查不到,后面的能查到将会显示后面的数据,页面展示数据是不会展示全部数据,只会展示其中的几个字段,故而显示其中的几个数字;当把这几个数据换成information_schema.tables中的字段,改成select * from infomation_schema.tables where table_schema = '当前库名',就能查询到当前库里的表名。
	然后呢!union select 改成select * from infomation_schema.columns where table_schema = '当前库名' and table_name='库中的表命',就能查询到当前库里表中的字段。
	知道了表中的字段,在改成查询表的语句就能拿到表的数据

在这里插入图片描述

select * from information_schema.tables where table_schema='pikachu';
select table_name from information_schema.tables where table_schema='pikachu';

#information_schema 库中存放着所有数据库的表名还有字段名,通过查询information_schema库中的数据可以得到其他库中的表名和字段名

在这里插入图片描述

select * from information_schema.columns where table_schema='pikachu' and table_name='users';
select column_name from information_schema.columns where table_schema='pikachu' and table_name='users';

在这里插入图片描述

仅供学习使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值