这两天是这么计划的,借着实验室给我们留的实验环境,今天早上复习一下sql的基础语法,下午再把之前做过的sqlilab再看一下,最后学习使用sqlmap
0x01–基本语法
打开终端,开启mysql:
mysql -uroot -p
关于数据库,我觉得比较重要的就是数据的增删改查,数据还原,数据备份,以及mysql数据库语法和语句,这里我会通过一些实验来体现。
语法部分参考菜鸟教程的mysql教程
0x01(数据库以test为例)
创建数据库:
mysql> create database test;
删除数据库:
mysql> drop database test;
选择数据库:
mysql> use test;
mysql数据类型参考:http://www.runoob.com/mysql/mysql-data-types.html
创建数据表:
基本语法–> CREATE TABLE table_name (column_name column_type);
放一个栗子:1
2
3
4
5mysql> create table test(
-> 'ID number' INT NOT NULL,
-> 'NAME' VARCHAR(100) NOT NULL,
-> PRIMARY KEY('ID number'))
-> ENGINE=InnoDB DEFAUTL CHARSET=utf8;
这个是错误的,有几处错误,“ ‘ ”要改成“ ` ”,每一个字段中间都要有一个空格,DEFAULT才是正确的拼写。1
2
3
4
5mysql> create table test(
-> `ID number` INT NOT NULL,
-> `NAME` VARCHAR(100) NOT NULL,
-> PRIMARY KEY(`ID number`))
-> ENGINE=InnoDB DEFAULT CHARSET=utf8;
我觉得这个创建数据表最坑,虽然很鸡肋,但是之前刚学sql的时候老是写错语法。
删除数据表:
mysql>drop table test;
插入数据:
基本语法如下1
2
3INSERT INTO table_name ( field1, field2,...fieldN )
VALUES
( value1, value2,...valueN );
如果数据是字符型,必须使用单引号或者双引号,如:”value”。
放一个栗子:
我们创建了DOG数据表,有number 还有 NAME 两个字段:1
2
3
4
5
6
7
8mysql> INSERT INTO DOG
-> (number,NAME)
-> values
-> (123,"jojo");
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO DOG (number,NAME) values (235,"koko");
Query OK, 1 row affected (0.01 sec)
我觉得在创建数据表时,字段名不能是那种带有空格的,我觉得有空格的字段名会出事。需要空格时用”_”代替.
查询数据:
select 字段名 from 数据表名 where 子句条件
1
2
3
4
5
6
7
mysql> select NAME from DOG where number=123;
+------+
| NAME |
+------+
| jojo |
+------+
1 row in set (0.00 sec)
更新数据:
UPDATE 数据表名 SET 字段名=new-字段值 where 子句条件
1
2
3
4
5
6
7
8
9
10
11
12mysql> UPDATE DOG SET NAME="ming" where number=123;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from DOG;
+--------+------+
| number | NAME |
+--------+------+
| 123 | ming |
| 235 | koko |
+--------+------+
2 rows in set (0.00 sec)
删除数据:
DELETE FROM table_name [WHERE Clause]
如果没有指定 WHERE 子句,MySQL 表中的所有记录将被删除。
你可以在 WHERE 子句中指定任何条件
您可以在单个表中一次性删除记录。
当你想删除数据表中指定的记录时 WHERE 子句是非常有用的。
LIKE子句:
我就用一个栗子来理解吧,LIKE子句就是用于配合where来使用。
我觉得mysql的基本语法就是这些了。
1.增:
insert into 表名 values(0,’测试’);
注:如上语句,表结构中有自动增长的列,也必须为其指定一个值,通常为0
insert into 表名(id,name) values(0,’尹当’)–同上
2.删数据:
delete from 表名;
delete from 表名 where id=1;
删除结构:
删数据库:drop database 数据库名;
删除表:drop table 表名;
删除表中的列:alter table 表名 drop column 列名;
3.改:
修改所有:updata 表名 set 列名=’新的值,非数字加单引号’ ;
带条件的修改:updata 表名 set 列名=’新的值,非数字加单引号’ where id=6;
4.查:
查询所有的数据:select from 表名;
带条件的查询:
select from 表名 where 列名=条件值;
Select from 表名 where 列名 not like(like) ‘字符值’
分页查询:select from 表名 limit 每页数量 offset 偏移量;
5.备份数据库:(将数据库test备份)
mysqldump -u root -p test>c:/test.txt
备份表格:(备份test数据库下的mytable表格)
mysqldump -u root -p test mytable>c:/test.txt
将备份数据导入到数据库:(导回test数据库)
mysql -u root -p test
- 导出数据:
mysqldump –opt test > mysql.test
即将数据库test数据库导出到mysql.test文件,后者是一个文本文件
如:mysqldump -u root -p123456 –databases dbname > mysql.dbname
就是把数据库dbname导出到文件mysql.dbname中。 - 导入数据:
mysqlimport -u root -p123456 < mysql.dbname。
不用解释了吧。 - 将文本数据导入数据库:
文本数据的字段数据之间用tab键隔开。
use test;
load data local infile “文件名” into table 表名;
0x02–mysql字符串匹配模式
(开启数据库test,选择数据表DOG)
(1)标准的sql模式匹配(简单)
以“t”开头的使用 t%
以“m”结尾的使用 %m
内容中有“com”的 使用 %co字符m%
搜索包含4个字符的使用 “____”,即4个“_”
(2)正则表达式匹配模式
匹配任何单个的字符 “.”
select * from DOG where NAME REGEXP "."
匹配以“t”开头的使用 “^”
select * from DOG where NAME REGEXP "^t"
匹配以“m”结尾的使用 “$”
select * from DOG where NAME REGEXP "m$"
匹配有6个字符的名字
select * from DOG where NAME REGEXP "^......$"
select * from DOG where NAME REGEXP "^.{6}$"
(使用{n}:重复n次操作符前的字符)
匹配含有某些字符的名字,比如[abc],[a-z],[A-Z],[a-zA-Z],[aA],[0-9]
select * from DOG where NAME REGEXP "[abc]"
(匹配含有’a’,’b’,’c’的任何一个字符)
(3)列的别名
ORDER BY 我想估计不用说了吧,应该大家都会用,那么来点好玩的,给列来一个别名
select number as x,NAME as y from DOG order by x,y;
创建一个新表,有原来的数据
create table student select number as id,NAME as name from DOG;
(4)表的别名
我个人觉得这个的使用取决于个人查询数据的需求,因为实验用的数据表,所以就偷懒一下。
(5)取出互不相同的数值,但数据库中有相同的数据,为去除冗余的行.使用distinct
select distinct 字段 from table_name where 条件子句
(6)关于NULL,我觉得有一个很好的栗子,就是查询某学生留校情况,条件为 “leave IS NOT NULL”,不可写成“leave != NULL”
NULL 和 “” 是不一样的,如果数据中,某人的号码为NULL,说明数据库中无此人的号码,他有,但是我们没存。如果为“”,空字符串说明他没有手机号码。