想学好sql注入,我想MYSQL至少一定要学好,因为无论是打CTF还是日常,这部分的知识扩展总是让我有捉襟见肘的感觉
MYSQL常见命令
查看当前所有的数据库show databases;
2.打开指定的库
use 库名
3.查看当前库的所有表 show tables;
4.查看其它库的所有表 show tables from 库名;
5.创建表
create table表名( 列名列类型,列名列类型,..);
6.查看表结构desc表名;
7.查看服务器的版本方式一:
登录到mysql服务端
select version();
方式二:没有登录到mysq1服务端
mysql –version或mysql –V
MySQL的语法规范
1.不区分大小写,但建议关键字大写,表名、列名小写
2.每条命令最好用分号结尾也可以\g
3.每条命令根据需要,可以进行缩进或换行
4.注释
单行注释:#注释文字
单行注释:– 注释文字
多行注释:/* 注释文字 */
Contents
进阶1:基础查询
1/*语法:
select 查询列表 from表名;
特点:
1、查询列表可以是:表中的字段、常量值、表达式、函数
2、查询的结果是一个虚拟的表格
1.查询表中的单个字段
SELECT last_name FROM employees;
2.查询表中的多个字段
SELECT last_name,salary,email FROM employees;
SELECT last_name
,last_name
FROM employees;(是着重号,为了区分关键字和字段,字段加
)
个人所想可尝试绕过某些限制SELECT flag
from flag;
3.查询表中的所有字段
SELECT * FROM employees;
4.查询常量值
SELECT 100;
SELECT ‘john’;(不区分字符和字符串,都用”引上)
5.查询表达式
SELECT 100%98;
6.查询函数
SELECT VERSION();
7.起别名
/*
①便于理解
②如果要查询的字段有重名的情况,使用别名可以区分开来
*/
方式一:使用as
SELECT 100%98 AS 结果;
SELECT last_name As 姓,first_name As 名 FROM employees,
方式二:使用空格
SELECT last_name 姓,first_name 名 FROM employees;
案例:查询salary,显示结果为out put
SELECT salary AS “out put” FROM employees;(如果不给out put加上引号,就会产生歧义,与关键字out冲突,引起报错)
8.去重
案例:查询员工表中涉及到的所有的部门编号
DISTINCT关键字,将相同的去掉,保留一个
SELECT DISTINCT department_id FROM employees;
java中的+号:
①运算符,两个操作数都为数值型
②连接符,只要有一个操作数为字符串
mysq1中的+号:
仅仅只有一个功能:运算符
select 100+90;两个操作数都为数值型,则做加法运算–190
select ‘123’+90;只要其中一方为字符型,试图将字符型数值转换成数值型如果转换成功,则继续做加法运算–213
select ‘john’+90;如果转换失败,则将字符型数值转换成0 –90
select ‘1john’+90; –91
select null+10;只要其中一方为null,则结果肯定为null
mysql的加法运算同php的弱类型一样(可以看下php的弱类型加减)
*/
案例:查询员工名和姓连接成一个字段,并显示为姓名
CONCAT起到拼接的作用,mysql中的拼接查询不用+
SELECT CONCAT(‘a’,’b’,’c’)As 结果;
SELECT CONCAT(1ast_name,first_name)As 姓名 FROM employees;
练习:显示出表employees的全部列,各个列之间用逗号连接,列头显示成OUT_PUT
SELECT IENULL(commission_pct,0)As 奖金率,
commission_pct
FROM
employees;
SELECT CONCAT(first_name
,’,’,last_name,',',job_id
,’,’,IENULL(commission_pct,0))As out_put FROM employees;
因为commission_pct字段中包含null值,所以我们要用IFNULL进行一个判断筛选,不然返回的值因为NULL相加将都为NULL