sql

sql的一些知识

Posted by wx_x on 2021-10-16
Words 4.1k and Reading Time 16 Minutes
Viewed Times

mysql基础语言

前言:

cmd进入mysql终端:
d: 访问d盘mysql源文件
cd D:\phpstudy_pro\Extensions\MySQL8.0.12\bin)

规则:

不区分大小写;
分号结束一行;
SQL 语句中含有字符串的时候,需要像 ‘abc’ 这样,使用英文单引号’将字符串括起来,用来标识这是一个字符串。(时间也是如此);
全英输入(半角字)

基本语句:

1.查看数据库:

show databases like ‘数据库名’;例:show databases like ‘mysql’;
like从句:
查看完全匹配:SHOW DATABASES LIKE ‘test_db’;
查看名称匹配:SHOW DATABASES LIKE ‘%test%’;
查看结尾匹配:SHOW DATABASES LIKE ‘%db’;
查看开头匹配:SHOW DATABASES LIKE ‘db%’;

2.创建数据库并查看:

create database 数据库名;
详细创建:
CREATE DATABASE [IF NOT EXISTS] <数据库名>
[[DEFAULT] CHARACTER SET <字符集名>] //采用什么语言显示,比如中文gb2312等还有通用方便迁移库的utf8。
[[DEFAULT] COLLATE <校对规则名>];

3.修改字符集以及规则:

ALTER DATABASE [数据库名] {
[ DEFAULT ] CHARACTER SET <字符集名>
[ DEFAULT ] COLLATE <校对规则名>}
ps:
ALTER DATABASE 用于更改数据库的全局特性。
使用 ALTER DATABASE 需要获得数据库 ALTER 权限。
数据库名称可以忽略,此时语句对应于默认数据库。
CHARACTER SET 子句用于更改默认的数据库字符集。

4.删除数据库:

DROP DATABASE [ IF EXISTS ] <数据库名>

5.USE 语句用来完成一个数据库到另一个数据库的跳转

6.活用注释:

从结果中删除重复行

SELECT DISTINCT product_id, purchase_price FROM Product;

单行注释可以使用—注释符,—注释符后需要加一个空格,注释才能生效。格式如下:
— 从结果中删除重复行
SELECT DISTINCT product_id, purchase_price FROM Product;

多行注释使用/ /注释符

7.大小写问题大厂规定:

【强制】表名、字段名必须使用小写字母或数字,禁止出现数字开头,禁止两个下划线中间只出现数字。数据库字段名的修改代价很大,因为无法进行预发布,所以字段名称需要慎重考虑。

8.错误代码: http://c.biancheng.net/view/vip_8326.html

数据’表’基本操作篇:

创建表:

CREATE TABLE <表名> ([表定义选项])[表选项][分区选项];
[表定义选项]的格式为:
<列名1> <类型1> [,…] <列名n> <类型n>
表名称被指定为 db_name.tbl_name,无论是否有当前数据库,都可以通过这种方式创建
使用 CREATE TABLE 创建表时,必须指定以下信息:
要创建的表的名称不区分大小写,不能使用SQL语言中的关键字,如DROP、ALTER、INSERT等。
数据表中每个列(字段)的名称和数据类型,如果创建多个列,要用逗号隔开。
例:完整创建一个表:
create database test_wxx;
use test_wxx;
create table tb_em1
(
id int(11),
name varchar(25),
deptID int(11),
salary float
);
show tables;

修改表:

语法格式:alter table <表名> [修改选项];
修改选项的语法格式如下:
{ ADD COLUMN <列名> <类型>
| CHANGE COLUMN <旧列名> <新列名> <新列类型>
| ALTER COLUMN <列名> { SET DEFAULT <默认值> | DROP DEFAULT }
| MODIFY COLUMN <列名> <类型>
| DROP COLUMN <列名>
| RENAME TO <新表名>
| CHARACTER SET <字符集名>
| COLLATE <校对规则名> }

修改表名:

ALTER TABLE <旧表名> RENAME [TO] <新表名>;
修改表字符集:ALTER TABLE 表名 [DEFAULT] CHARACTER SET <字符集名> [DEFAULT] COLLATE <校对规则名>;
修改字段名称:ALTER TABLE <表名> CHANGE <旧字段名> <新字段名> <新数据类型>;
修改字段数据类型:ALTER TABLE <表名> MODIFY <字段名> <数据类型>
删除字段:ALTER TABLE <表名> DROP <字段名>;
删除数据表:DROP TABLE [IF EXISTS] 表名1 [ ,表名2, 表名3 …]

MySQL删除被其它表关联的主表:

DESCRIBE查勘表结构:

以表格的形式展示表结构:
DESCRIBE/DESC 语句会以表格的形式来展示表的字段信息,包括字段名、字段数据类型、是否为主键、是否有默认值等。

MySQL数据表添加字段(三种方式)

-1.末尾添加字段:ALTER TABLE <表名> ADD <新字段名><数据类型>[约束条件];
-2.开头:ALTER TABLE <表名> ADD <新字段名> <数据类型> [约束条件] FIRST
-3.中间:ALTER TABLE <表名> ADD <新字段名> <数据类型> [约束条件] AFTER <已经存在的字段名>;;

数据表操作语句:

http://c.biancheng.net/view/2548.html(<>不用打上mysql,为助记符)
ps:use切换数据库才可以操作表!
例:show tables from dvwa;
use dvwa;
select * from users;

SELECT * FROM 表名:

(使用“”查询表的所有字段)
ps:使用“
”的优势是,当不知道所需列的名称时,可以通过“*”获取它们。

查询特定字段:

SELECT < 列名 > FROM < 表名 >;
SELECT <字段名1>,<字段名2>,<字段名3>…<字段名n> FROM < 表名 >;

去重:

select distinct <字段名> from <表名>;
“字段名”为需要消除重复记录的字段名称,多个字段时用逗号隔开。

设置别名:

为表设置别名:<表名> [AS] <别名>
为字段名设置别名:<字段名> [AS] <别名>

限制查询结果:

在查询表中出现上万种结果的时候,可以增加表返回的速度,减少给服务器的压力
指定初始位置:LIMIT 初始位置,记录数:limit 3,5;
不指定初始位置:LIMIT 记录数
LIMIT和OFFSET组合使用:LIMIT 记录数 OFFSET 初始位置

对查询结果排序:

ORDER BY <字段名> [ASC|DESC]
ps: ASC|DESC:ASC表示字段按升序排序;DESC表示字段按降序排序。其中ASC为默认值。
ps:想要全部降序或者升序,必须对每一个关键字进行升降序;
ps:在对多个字段进行排序时,排序的第一个字段必须有相同的值,才会对第二个字段进行排序。如果第一个字段数据中所有的值都是唯一的,MySQL 将不再对第二个字段进行排序。
例:
单字段:SELECT * FROM tb_students_info ORDER BY height;
多字段: SELECT name,height FROM tb_students_info ORDER BY height,name;

WHERE:条件查询数据

语法格式:where 查询条件
查询条件可以是:
1.带比较运算符和逻辑运算符的查询条件
2.带 BETWEEN AND 关键字的查询条件
3.带 IS NULL 关键字的查询条件
4.带 IN 关键字的查询条件
5.带 LIKE 关键字的查询条件
例子:
单查询条件:
mysql> SELECT name,age FROM tb_students_info
-> WHERE age<22; 多查询条件: mysql> SELECT name,age FROM tb_students_info
-> WHERE age>22 and height>=170;(和:表示两个都满足)
mysql> SELECT name,age,height FROM tb_students_info
-> WHERE age>21 OR height>=175;(或:只用满足一个)
mysql> SELECT name,age,height FROM tb_students_info
-> WHERE age>21 XOR height>=175;(异或:只有一个为真的时候才会返回数据)

LIKE模糊查询:

LIKE 关键字主要用于搜索匹配字段中的指定内容。
语法格式: [NOT] LIKE ‘字符串’
LIKE 关键字支持百分号“%”和下划线“”通配符。
—“%”是 MySQL 中最常用的‘通配符’,它能代表任何长度的字符串,字符串的长度可以为 0。例如,a%b表示以字母 a 开头,以字母 b 结尾的任意长度的字符串。该字符串可以代表 ab、acb、accb、accrb 等字符串。
ps:匹配字符必须添加单引号和双引号
例:查找所有不以字母“T”开头的学生姓名
mysql> SELECT name FROM tb_students_info
-> WHERE name LIKE ‘T%’;
ps: ‘T%’ :结尾为T的学生姓名;
ps: ‘%e%:名字里有e;
—“
“只能代表单个字符,字符的长度不能为 0;
例:查找所有以字母“y”结尾,且“y”前面只有 4 个字母的学生姓名
mysql> SELECT name FROM tb_students_info
-> WHERE name LIKE ‘____y’;

下面是使用通配符的一些注意事项:

1.注意大小写。MySQL 默认是不区分大小写的。如果区分大小写,像“Tom”这样的数据就不能被“t%”所匹配到。
2.注意尾部空格,尾部空格会干扰通配符的匹配。例如,“T % ”就不能匹配到“Tom”。
3.注意 NULL。“%”通配符可以到匹配任意字符,但是不能匹配 NULL。也就是说 “%”匹配不到 tb_students_info 数据表中值为 NULL 的记录。

下面是一些使用通配符要记住的技巧。

1.不要过度使用通配符,如果其它操作符能达到相同的目的,应该使用其它操作符。因为 MySQL 对通配符的处理一般会比其他操作符花费更长的时间。
2.在确定使用通配符后,除非绝对有必要,否则不要把它们用在字符串的开始处。把通配符置于搜索模式的开始处,搜索起来是最慢的。
3.仔细注意通配符的位置。如果放错地方,可能不会返回想要的数据。

ps:如果查询内容中包含通配符,可以使用“\”转义符。例如,在 tb_students_info 表中,将学生姓名“Dany”修改为“Dany%”后,查询以“%”结尾的学生姓名,SQL 语句和运行结果如下:
mysql> SELECT NAME FROM test.tb_students_info WHERE NAME LIKE ‘%\%’;

范围查询 BETWEEN AND :

BETWEEN AND 需要两个参数,即范围的起始值和终止值。如果字段值在指定的范围内,则这些记录被返回。如果不在指定范围内,则不会被返回。
语法格式: [NOT] BETWEEN 取值1 AND 取值2
ps:
NOT:可选参数,表示指定范围之外的值。如果字段值不满足指定范围内的值,则这些记录被返回。
取值1:表示范围的起始值。
取值2:表示范围的终止值
ps:可以查询时间范围内,时间书写格式‘2021-3-10’

空值查询:

空值不同于 0,也不同于空字符串;
语法格式:IS [NOT] NULL;
IS NULL 是一个整体,不能将 IS 换成“=”;

使用GROUP BY分组查询

GROUP BY 关键字,可以根据一个或多个字段对查询结果(select * from users where id=1 groud by name )进行分组。
语法格式:GROUP BY <字段名>

单独使用 GROUP BY 关键字时,查询结果会只显示每个分组的’第一条记录‘。

ps: GROUP BY 关键字可以和 GROUP_CONCAT() 函数一起使用。GROUP_CONCAT() 函数会把每个分组的字段值都显示出来。

与聚合函数使用:
ps:聚合函数包括 COUNT(),SUM(),AVG(),MAX() 和 MIN()。其中,COUNT() 用来统计记录的条数;SUM() 用来计算字段值的总和;AVG() 用来计算字段值的平均值;MAX() 用来查询字段的最大值;MIN() 用来查询字段的最小值。
ps:函数大全— http://c.biancheng.net/mysql/function/

与 WITH ROLLUP使用:
WITH POLLUP 关键字用来在所有记录的最后加上一条记录,这条记录是上面所有记录的总和,即统计记录数量。

HAVING过滤分组:

可以使用 HAVING 关键字对分组后的数据进行过滤。
语法格式:HAVING <查询条件>
ps: HAVING 关键字和 WHERE 关键字都可以用来过滤数据,且 HAVING 支持 WHERE 关键字中所有的操作符和语法。
两者差别:
一般情况下,WHERE 用于过滤数据行,而 HAVING 用于过滤分组。
WHERE 查询条件中不可以使用聚合函数,而 HAVING 查询条件中可以使用聚合函数。
WHERE 在数据分组前进行过滤,而 HAVING 在数据分组后进行过滤 。
WHERE 针对数据库文件进行过滤,而 HAVING 针对查询结果进行过滤。也就是说,WHERE 根据数据表中的字段直接进行过滤,而 HAVING 是根据前面已经查询出的字段进行过滤。
WHERE 查询条件中不可以使用字段别名,而 HAVING 查询条件中可以使用字段别名。

cross join:交叉连接:

CROSS JOIN 查询出两张表中的’笛卡尔积‘
语法格式:SELECT <字段名> FROM <表1>, <表2> [WHERE子句]
不推荐使用where字句,因为MySQL 会先生成两个表的笛卡尔积,然后再选择满足 WHERE 条件的记录。

INNER JOIN:内连接

内连接使用 INNER JOIN 关键字连接两张表,并使用 ON 子句来设置连接条件。如果没有连接条件,INNER JOIN 和 CROSS JOIN 在语法上是等同的,两者可以互换。
语法格式:SELECT <字段名> FROM <表1> INNER JOIN <表2> [ON子句]
ps:SELECT 语句后面的写法是表名.列名
ps:INNER JOIN 也可以使用 WHERE 子句指定连接条件,但是 INNER JOIN … ON 语法是官方的标准写法,而且 WHERE 子句在某些时候会影响查询的性能。

外连接LEFT/RIGHT JOIN

外连接会先将连接的表分为基表和参考表,再以基表为依据返回满足和不满足条件的记录。
-左连接:
—语法格式:SELECT <字段名> FROM <表1> LEFT OUTER JOIN <表2>
—语法说明如下:
字段名:需要查询的字段名称。
<表1><表2>:需要左连接的表名。
LEFT OUTER JOIN:左连接中可以省略 OUTER 关键字,只使用关键字 LEFT JOIN。
ON 子句:用来设置左连接的连接条件,不能省略。
ps:“表1”为基表,“表2”为参考表。左连接查询时,可以查询出“表1”中的所有记录和“表2”中匹配连接条件的记录。
如果“表1”的某行在“表2”中没有匹配行,那么在返回结果中,“表2”的字段值均为空值(NULL)。

-右连接与左连接就是基表不同,右连接选择表2为基表;

sqli-labs散记:

where 1=1 是为了避免where 关键字后面的第一个词直接就是 “and”而导致语法错误。
位运算:https://www.runoob.com/w3cnote/bit-operation.html
column:列

2020信安培训:
sqli-labs:
ps:”?:传参”
1.是否存在注入:and 1=2 / or 1=1
2.判断字段数:order by 1 # (字段数是3)
3.判断回显字段:union select 1,2,3, #(联合查询)
4.注入出数据库的名称:information_schema
ps:特殊的表:schemata(数据库名字),tables(数据库的表名),columns(表中的字段)
information_schema.schemata
5.选择数据库进行表名注入:https://www.cnblogs.com/3ichae1/p/11229029.html
6.选择表进行字段名的注入:information _schema.columns
?id=-3’ union select 1,group_concat(solumn_name),3 from information_schema.columns where table_name=’users’
7.选择表的字段进行数据的注入:
?id=3’ union select 1,group_concat(username),3 from users %23
?id=3’ union select 1,group_concat(password),3 from users %23

11.27培训要求:
1.DVWA安装:https://blog.csdn.net/u013541325/article/details/109323067?biz_id=102&utm_term=dvwa%E5%AE%89%E8%A3%85%E6%95%99%E7%A8%8B&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-109323067&spm=1018.2118.3001.4449
ps:DVWA使用教程:https://blog.csdn.net/ai_64/article/details/91353960
ps:运行php环套件后(apache2.4.39+FTP0.9.60+MySql):浏览器输入http://127.0.0.1/DVWA-master/security.php进入DVWA
2.火狐插件:PoxyProxy-高级代理服务器管理工具具有灵活,稳健等特点
3.burpsuite:web渗透常用工具(顶级常用工具,在gitbook上面有《burp suite实战指南》),可进行抓包
4.安装burpsuite需要解决java的环境和配置问题:安装时出现了点击next无反应,目前解决方案为换burpsuite版本
教程网址:https://blog.csdn.net/qq_40684306/article/details/88619565
教程网址:https://blog.csdn.net/u014549283/article/details/81248886?utm_medium=distribute.pc_relevant.none-task-blog-title-2&spm=1001.2101.3001.4242
5,burpsuite抓包教程:https://www.cnblogs.com/mihoutao/p/11690432.html
6.Proxifer:全局代理(我的电脑会很慢,全局的意思是给你的ip加上一层掩饰。你可以不仅仅在浏览器浏览外网,还可以在应用比如steam)


本博客所有文章除特别声明外,均采用CC BY-SA 4.0 协议 ,转载请注明出处!

...

...

00:00
00:00