想学好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.注释
单行注释:#注释文字
单行注释:– 注释文字
多行注释:/* 注释文字 */

进阶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