MySQL数据库基础及sql命令了解

数据库的常见概念

1. 数据(Data): 在计算机系统中,各种字母、数字符号的组合、语音、图形、图像等统称为数据。

2. 数据库(Database):数据库是按照数据结构来组织、存储和管理数据的"仓库"。

3. 数据库管理系统(DBMS):数据库管理系统(database management system)是一种操纵和管理数据库的软件,用于建立、使用和维护数据库。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。

4. 结构化查询语言(SQL):结构化查询语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。

数据库存储数据的特点

  • 数据存放到表中,然后表再放到库中
  • 一个库中可以有多张表,每张表具有唯一的表名用来标识自己
  • 表中有一个或多个列,列又称为"字段",相当于java中"属性"
  • 表中的每一行数据,相当于java中"对象"。

数据库基础语句

命令行查询

我们先打开MySQL: 先进入你MySQL的目录,然后输入mysql -h localhost -u root -p,回车提示输入密码,成功后连接MySQL数据库。

查看有哪些数据库:show databases;  (注意每次执行数据库命令时要加";",你也可以设置成其他符号,这里不再叙述)

 进入指定数据库 :  use 数据库名;

查看数据库中有哪些表:   show tables;

SQL语句查询

  • SCHEMATA:存储数据库名的表
  • Tables:存储数据库以及数据库中的表名
  • Columns:存储数据库、表、以及表中的字段。

我们来实验按DVWA来实验一下:

select * from information_schema.schemata; //爆出数据库

select table_name from information_schema.tables where table_schema='dvwa'; //爆出指定数据库 dvwa 的所有表名

select column_name from information_schema.columns where table_schema='dvwa' and table_name='users';// 爆出 dvwa 指定表,users 的所有字段名

select user,password from dvwa.users; //爆出数据库 users 内容

select version(),@@version,@@global.version,database();//查主机名称,数据库路径,操作系统版本

select user(),current_user(),system_user(),session_user();//查询数据库用户信息

user() 系统用户和登录主机名

current_user() 当前登录用户和登录主机名

system_user() 数据库系统用户账户名称和登录主机名

session_user() 当前会话用户名和登录主机名

 

 

数据库语法

数据库语法太多了,我们这里就简单介绍一点了。

Where语句用法

select 查询列表(字段、常量、表达式、函数) from 表名 where (列、运算符、值)

 

下面的运算符可以在Where子句中使用

操作符

描述

=

等于

<>

不等于

>

大于

<

小于

>=

大于等于

<=

小于等于

BETWEEN

在某个范围内

LIKE

搜索某种模式

注意:在一些版本里的SQL中,操作符<>可以写成!=。

 

联合语句查询——Union

联合查询时,查询结果的列标题为第一个查询语句的列标题。因此,要定义列标题必须在第一个查询语句中定义。要对联合查询结果排序时,也必须使用第一查询语句中的列名、列标题或者列序号。

在使用UNION 运算符时,应保证每个联合查询语句的选择列表中有相同数量的表达式,并且每个查询选择表达式应具有相同的数据类型,或是可以自动将它们转换为相同的数据类型。在自动转换时,对于数值类型,系统将低精度的数据类型转换为高精度的数据类型。

在包括多个查询的UNION语句中,其执行顺序是自左至右,使用括号可以改变这一执行顺序。例如:查询1 UNION (查询2 UNION 查询3)

ORDER BY n //判断当前查询结果的列数,配合 union 实用。

ORDER BY n+1; 让 n 一直增加直到出现错误页面。

Union 联合查询 union select …

select * from dvwa.guestbook order by 3;

select * from dvwa.guestbook order by 4;//order by 4报错,说明结果为3列

select * from dvwa.guestbook where name= 'test' union select 1,2,3;

select * from dvwa.guestbook where name= 'test' and 1=2 union select 1,2,3;

concat ,concat_ws ,group_concat 函数

在实际注入中,巧妙借助 concat,concat_ws,group_concat 函数,可以将注入结果更好的显示在页面中。

 

concat(str1,str2...)——没有分隔符串联多列结果。

concat_ws(separator,str1,str2,...)——含有分隔符地串联多列结

上述两个函数功能而非常类似,只是在分隔符上的区别.

应用场景:查询结果只有一行,一列或多列数据。

Concat()和 concat_ws()函数的对比,两者均可以将一行多列的数据连接为一列,区别 concat()连接没有连接符号。Concat_ws()可以定义连接符,用分隔符将结果连接起来。//0x3a是十六进制":"的意思。

测试结果一目了然concat函数可以把多列合成一列,concat_ws可以在其基础上用:分割。

group_concat(str1,str2,...)——用逗号,串联多行结果为一行,每行结果用逗号串联。

应用场景:查询结果有一行或多行,一列或多列数据。

Group_concat()可以将多行多列查询结果,显示在一行一列,并且多行结果之间用逗号","分隔。

通过对比可以发现,group_concat()可以将多行数据用逗号隔开成为一行。

具体注入方式,在以前的博客中提到过很多,接下来会重新学习并记录下来。

posted @ 2020-04-25 17:41  戚源  阅读(331)  评论(0编辑  收藏  举报