《关于我高考分数太低不得不去转行搞信息安全这件事》

  • 为什么随便什么事情加上书名号都能成为轻小说啊???

emmmmm,最开始其实是有点遗憾的,因为我原本以为我可以稳的不能再稳地进入CUIT的软件工程专业的,毕竟我比去年的软工最低分数线高了5000名,比CUIT最低分数线高了12000名,这还录不上就过分了!结果就真的很过分了,河南省的117w考生中还真的出了4个头比我还铁的人,然后我就来了CUIT的信息安全专业。

但是俗话说既来之则安之,都是IT类的专业,只要自己好好学,就肯定有出路的。再说这些东西其实都是靠自学,只要自学能力够了,转什么方向都很轻松,抱着这样的想法,我就来到了CUIT。

然后在网上开始搜索各种关于CUIT信息安全的信息,因为当时在报考志愿的时候根本就没有考虑过CUIT的信息安全专业(我真的还是太自信了QAQ),然后在知乎中了解到了CUIT的三叶草社团非常非常厉害,还找到了三叶草的招新QQ群,于是我就加了进去。

里面的学长非常热情,其中有学长在群里面问有人想要学Web吗,我回了一句我想学,然后就收到了学长的QQ好友申请,然后他就推荐了我看图解HTTP和了解HTML相关的知识。几天过后,他有把我拉进了一个Web的学习小组,布置了第一次的任务,这也是这篇MySQL命令文章的来源。来吧少年,努力成为一名优秀的安全工程师吧!

MySQL增加系列

CREATE:

  1. create database

创造一个名字叫name的数据库:

1
create database "name";
  1. create table

创造一个名字叫 name 的表:

1
2
3
4
5
6
create table "name"
(
column1 datatype1(size),
column2 datatype2(size),
column3 datatype3(size)
);

这里要注意的是如果不在想要加入表单的数据库中,可以在创建表单的同时,把表单直接加入想要加入的数据库中,具体的写法是把上面语句中的”name”代替为:database_name.table_name 这样就直接把表单加入到了指定的database_name里面了。

USE

使用语句,用来选择数据库。

1
use "DATABASE"; 

使用名为DATABASE的数据库。

SET

1
set "column" utf8; 

将列column使用utf8编码 (防乱码)

DROP:

  1. drop table 语句 删除表
1
drop table "table_name";
  1. drop database 语句 删除数据库
1
drop database "database_name";

Truncate:

用来删除一个表的数据,但是不删除这个表。

1
truncate table "table_name";

SQL查看系列

VERSION:

用来返回数据库的版本信息。

1
select version();

SHOW:

用来显示所有的数据库或者表。

1
2
show databases;
show tablse;

SELECT

1
select "*/column"  from "table"; 

显示table表里面的所有列或者column列。

DATABASE()

配合着select食用,用来返回当前使用的数据库名字。

1
select database();

DISTINCT

distinct 不同,相异。

显示table表里的所有不重复的column列,加在column名称之前。(用于数据的去重)

1
select distinct "column" from "table";

WHERE

条件语句,显示出当column列里值等于0的数据,用于数据的过滤。

1
select * from "table" where "column=0";

LIMIT

只显示出来column!=0的时候,前2行的数据。等价于[1,2]的数据。

1
2
select * from "table" where "column!=0"
limit 2;

只显示出来column!=0的时候,第2行之后的2行数据,即第3,4行数据。

1
2
select * from "table" where "column!=0"
limit 2,2;

只显示出来column!=0的时候,第2行之后所有的数据。等价于[3,last]的数据。

1
2
select * from "table" where "column!=0"
limit 2,-1;

AND&OR:

主要运用在判断语句里面,作为增加判断复杂度的语句:

1
2
select * from "table" 
where "column!=0" or "column!=1"
1
2
select * from "table"
where "column1!=1" and "column2!=2"

上面就等同于if里面的&&和||啦。

ORDER BY:

排序语句,将要显示的数据按照自己要求的规则进行排序。

将table表里的数据,按照column列值进行排序,ASC为从小到大,DESC为从大到小,如果不写排序方式,则默认为ASC,从小到大。

1
2
select * from "table"
order by column ASC/DESC;

ASC全称ascend ,为升序的意思,即从小到大。

DESC全程descend,为降序的意思,即从大到小。

GROUP BY:

group by 语句用于结合聚合函数,根据一个或多个列对结果集进行分组。我们需要选择一个column列作为分组的依据,然后这个column中数值相同的数据将会被整合到一行数据中,被整合在一起的数据需要进行合并处理,不然就会报错。

也就是说,在 SELECT 语句中出现的元素要么为一个聚合函数的输入值,要么为 GROUP BY 语句的参数。

1
2
3
4
5
select column1, aggregate_function(column2)
from "table"
where column1<=10
group by column1;
having column2<=10;

这样,会返回一个列出所有不同column1的值为一行数据的表格,其中column1值相同的数据所拥有的column2的值会根据aggregate_function()的功能进行计算,然后出现在那行数据里。

HAVING语句!

需要注意的是,这里 where 语句是没有办法将 aggregate_function()返回的参数进行筛选的,因为在执行where的时候,聚合函数还没有工作,所以筛选只能使用在 group by 语句后面的having语句,通常来说having语句都处于命令的最后。

having其实是可以代替where来使用的,它甚至可以使用where不能使用的别名,比如 column1+column2 as column3 ,那么having就可以使用column3来筛选,但是where不行,where只能只用column1+column2。

但是有一点限制的是,对于select没有选中的数据,having是不能拿来用的,比如在语句 select column1,column2 from “table”; 中,后面的 having 语句就只能使用column1和column2来筛选数据,但是where可以使用没有被选中的column3来使用数据。

LIKE:

用于在where里面模糊匹配:

1
2
select * from "table"
where column like "%KeyWord%";

%这个符号非常有灵性,%在哪一边,哪一边就可以模糊处理,什么字符都可以,这个like简直就是搜索利器啊。直接搜搜column列里面的数据有没有和KeyWord相匹配的。

同时Like语句 支持 or/and/ 逻辑哦!具体用法如下:

1
2
3
select * from "table"
where column1 like "%KeyWord1%"
or column1 like "%KeyWord2%";

Like 除了可以用 % 来模糊任意个字符,还可以用 _ 下划线,来之模糊下划线部位的字符。

IN:

where会用到,等价于 =

1
2
select * from "table"
where column in (value1,value2,value3);

下面是等价的写法:

1
2
select * from "table"
where column=value1 or column=value2 or column=value3;

UNION:

Union用于合并两个select所选中数据的值,必须是两个表,并去重,如果不想去重,就使用UNION ALL 语句;

1
2
select column1 from "table1"
union select column2 from "table2";

这样就可以把table1和table2两个表中的column1列和column2列的数据进行合并,然后去重之后返回,大概就和并集概念是一样的,但是要注意这两个列中的数据类型必须相似,比如都是字符串连个列都应该是字符串,如果是整形,两个列都应该是整形。

BETWEEN:

between A and B 是用来来选取A到B范围内的元素,注意这个区间在不同的数据库中的开闭情况是不同的,在MySQL中,这个是两边都闭的区间。

这条语句可以用在任何数据类型上面,如果所作用的数据是字符串,那么它筛选的区间是根据字符串的首字母进行筛选的。

1
2
select * from "table"
where column between 'A' and 'B';

这个东西还能用来筛选日期,只要日期格式规范就行。

AS:

as是SQL语句中的别名,用来给原来的列或者由于运算新产生的列一个新的名字。

比如把两个列相加产生的新数据重新命名为 12sum:

1
select column1+column2 as 12sum from "table";

在比如把合并的几个字符串产生的新字符串命名为 12add:

1
select comcat(column1,column2) as 12add from "table";

SQL修改系列

INSERT INTO:

插入信息,insert into。

  1. 普通导入:第一行表名后面写列名,第二行Values后面写数据,注意如果要用单引号全用单引号,如果要用双引号全用双引号,需要保持一致性。
1
2
insert into "table" (column1,column2,column3)
values ("value1","values2","value3");
  1. 批量导入:和上面一样,不过写多个括号,用逗号隔开。
1
2
3
4
insert into "table" (column1,column2,column3)
values ("values1","values2","values3"),("values1","values2","values3"),
("values1","values2","values3"),
("values1","values2","values3");

UPDATE:

用于更新表中已经存在的数据:

1
2
3
update "table"
set column1=value1,column2=value2
where column0=value0;

当利用column0的值等于value0,来确定我们需要跟新的行,然后对这一行的column1和column2进行更新。

注意 where语句的存在非常重要,如果没有where,那么将会把表中的所有数据都更改,而不是指定数据。

DELETE:

用于删除表中的行:

1
2
delete from "table"
where column=value;

和上面的update一样,一定要注意where语句的存在,不然会把所有的行全部删掉,也就是删掉了整个表。注意Delete语句不支持单独删除某行某列的数据,只能删除整行数据。

JOIN:

连接函数,所谓连接函数,就是将两个不同表的数据连接在一起,输出一个新的表,这个表是两个表合并的结果,注意如果需要使用JOIN,尽可能让两个表的数据类型是一样的,这样可以很好的保证数据合并之后的效果。

join的连接,需要一个桥梁,也就是两个表中,有一列的数据类型是相同的,我们就能通过column1的值和column2的值相同的两个表的数据合并成一行。

1
table1 join table2 on table1.column1 = table2.column2;

下面的图真的就是JOIN的全部精髓了:

INSERT INTO SELECT:

这是MySQL数据库使用的命令,用来复制一个表单的完整数据加入到另外一个表单,但是需要注意的是,如果直接复制,那么需要两个表的每一列的数据类型必须完全的对应。

当然大部分情况两个表的数据类型当然不可能完全一样啦,所以我们就可以进行将指定列的数据进行复制,只要保证指定列的数据类型一样就可以了。

如果想只复制一部分数据,那么和where语句进行搭配使用就可以了,具体的语法规则如下:

1
2
3
insert into "table1" (column1,column2)
select column_1,column_2 from "table2"
where column_id=id;

SQL函数

concat()

  1. concat()

这个函数的作用就是将多个字符串连接成一个字符串,然后返回,如果里面有参数为NULL,那么返回的结果就是NULL。

普通版本的concat()的写法如下:

1
2
select concat(column1,' ',column2,' ',column3)
from "table";

最后会返回将column1/2/3三列的值合并在一起,中间用空格隔开。

  1. concat_ws()

这个东西是concat()的升级版本,意思为concat with separator,它的又是就是直接规定了分隔不同数据的字符,不用手动间隔了。

1
2
select concat_ws("separator",column1,column2,column3)
from "table";

上面三列数据合并的时候,会以 separator 为分隔符号出现在两列数据中间。

  1. group_concat()

这个就是concat()函数在group下面使用的函数了,当我们在使用group by 语句的时候,group_concat()就是一个聚合函数,作用就是把所有分到一组的数据聚合在一起,然后用逗号分隔开来。

截取字符串

  1. left()

这个函数是用来从左往右截取一定长度的字符串使用的,具体的用法就是left(string,length),string代表字符串,length表使要截取的长度。

  1. right()

和left同理,不过这个是从右往左截取字符串。

  1. substring()/substr()

这个函数是用来从特定的地方开始截取特定长度的字符串使用的。

用法:substr/substring(string,postion,length) 第三个参数length可以不填,如果不填的话,就直接截到尾了。 注意position可以填写负数,负数是直接按照倒数来算的。