zoukankan      html  css  js  c++  java
  • 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()可以将多行数据用逗号隔开成为一行。

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

  • 相关阅读:
    17 Letter Combinations of a Phone Number(medium)
    16 3Sum closest(medium)
    15 3Sum(medium)
    linux环境下搭建自动化Jenkins管理工具
    Danjgo学习笔记(五)----Django数据库的查询
    Danjgo学习笔记(五)----Django中表的关系
    Django常见的Field
    selenium+python+ip池 实现博客园刷博客浏览量
    Danjgo学习笔记(五)----常见模板过滤器和自制过滤器
    Danjgo学习笔记(四)---danjgo框架内的常用标签
  • 原文地址:https://www.cnblogs.com/qi-yuan/p/12774170.html
Copyright © 2011-2022 走看看