什么是数据库?
数据库就是将大量数据保存起来,通过计算机加工而成的可以高效访问的数据集合。
数据库是长期储存在计算机内、有组织的、可共享的数据集合。
数据库的基本知识
数据库结构
1、服务端:用于接收并处理其它程序发出的请求的程序(软件),或者是安装此类程序的设备(计算机)。
2、客户端:向服务器发出请求的程序(软件),或者是安装此类程序的设备(计算机)。
3、库:就是一堆表组成的数据集合
4、表(table):类似Excel,由行和列组成的二维表。
5、字段:表的列(垂直方向)。
6、记录:表的行(水平方向)。[ 注意 ] 关系数据库必须以行为单位进行数据读写。
WEB 访问:服务端:访问的服务器(中间件)客户端:浏览器
基本SQL语法
SQL语句:用关键字、表名和列名等组合而成的一条语句
3种SQL语句种类:
(1)DDL(数据定义语句):创建、删除或修改数据库以及数据库中的表等对象。
1、CREATE:创建数据库和表等对象
2、DROP:删除数据库和表等对象
3、ALTER:修改数据库和表等对象
(2)DML(数据操作语言):查询或修改表中的记录。
1、SELECT:查询表中的数据
2、INSERT:向表中插入数据
3、UPDATE:修改表中的数据
4、DELETE:删除表中的数据
(3)DCL(数据控制语言):确认或取消对数据库中的数据变更的执行操作,以及对用户的操作数据库中的对象权限进行设定。
数据库操作:
CREATE DATABASE db_name;
[ 新建数据库 ]
Show databases;
[ 查看所有数据库 ]
DROP DATABASE db_name;
[ 删除数据库 ]
USE db_name;
[ 使用数据库 ]
数据表操作:
CREATE TABLE table_name(column_name column_type);
[ 新建表 ]
Show tables;
[ 查看所有数据表 ]
DROP TABLE table_name;
[ 删除表格 ]
Desc table_name;
[ 查看表的类型 ]
ALTER TABLE table_name DROP 字段名;
[ 删除表里面的字段 ]
ALTER TABLE table_name ADD 字段名 字段类型;
[ 添加表里面的字段 ]
ALTER TABLE table_name change 旧字段 新字段 字段类型;
[ 修改字段名和属性 ]
字段其实是有一些属性的。
主键 PRIMARY KEY
[ 不能为空且唯一 ]
自增长 AUTO_INCREMENI
设置编码:CHARSET = utf8
NOT NULL
数据不能为空
数据类型:varchar(255) int(1) char float
https://www.runoob.com/mysql/mysql-data-types.html
插入数据:
INSERT INTO table_name (字段名,字段名) VALUES(字段值,字段值);
修改数据:
UPDATE table_name SET col_name = value WHERE 字段=字段值;
查询数据:
SELECT 字段名,字段名 FROM table_name WHERE 字段 = 字段值;
删除数据:
DELETE FROM table_name WHERE 字段=字段值;
查询当前库名:
SELECT database();
mysql字符串是可以接受16进制的
SQL语句书写规范:
1、以英文分号(;
)结尾
2、SQL语句本身大小写不敏感,不区分关键字的大小写,[ 注意 ] 插入到表中的数据是区分大小写的,如 “HI”、“Hi”、“hi” 都不同。
3、关键字大写,表名和列名的首字母大写
4、单词使用英文空格或换行符隔开
常数的书写方式:
字符串、日期:用单引号括起来(''
),如 Hello World
,'2022-5-20'
数字:直接书写,不用加单引号,如 5
单引号闭合 引号括号成对出现 选库 表不能重复创建 字段插数据
MySQL的基础查询语句
select * from 表名 order by 字段
[ ASC(默认) / DESC ] 升序(从小到大)ASC,降序(从大到小)DESC
select * from 表名 limit n,m;
n 表示从第几行开始,m表示取几条
select * from 表名 where 字段名 like '% %'
模糊查询
运算符号:+ - * / %
逻辑运算:NOT ( ! ) AND ( & ) OR ( | )
联合查询
表的内容无重复:
SELECT * FROM 表1 UNION SELECT * FROM 表2;
表的内容有重复:
SELECT * FROM 表1 UNION ALL SELECT * FROM 表2;
注意事项:
两次查询的列数必须一致
子查询
官方定义:子查询是一种常用计算机语言SELECT-SQL语句中嵌套查询下层的程序模块。当一个查询是另一个查询的条件时,称之为子查询。
理解:子查询就如同 1+2*2=5 (1+2)*2=6
子查询就是优先执行,然后执行得到的结果作为某个查询的条件
select * from 表名 where 字段名 = (select username from 表名where 字段名 = 字段值);
select * from user where username = (select username from admin where id = 1);
admin 表当 id = 1 的用户名是否在 user 表也存在
select * from user where username in (select username from admin)
检查 admin 表和 user 表是否有用户名相等
渗透测试常用函数
GROUP_CONCAT(col);
返回由属于一组的列值连接组合而成的结果
ASCII(char);
返回字符的ASCII码值
DATABASE();
返回当前数据库名
USER()或SYSTEM_USER();
返回当前登陆用户名
VERSION();
返回MySQL服务器的版本
SLEEP(n);
休眠 n 秒