数据库基础知识【MySQL】

说明:涉及到的操作均在MySQL中实现

一、基础概念

1、数据抽象
物理层、逻辑层、视图层
2、实例和模式
特定时刻存储在数据库中的信息的集合称作数据可的一个实例
模式:物理模式和逻辑模式
3、数据模型

  • 关系模型
  • 实体-联系模型
  • 基于对象的数据模型
  • 半结构化数据模型

4、数据库语言
数据操纵语言(Data-Manipulation Language,DML):比如查询语言(Query Language)
数据定义语言(Data-Definition Language,DDL):

  • 域约束
  • 参照完整性约束
  • 断言
  • 授权

5、事务管理

  • Atomicity,原子性
  • Consistency,一致性
  • Isolation:隔离性
  • Durability,持久性

6、基本类型

  • char(n):固定长度的字符串,指定长度n
  • varchar(n):可变长度字符串,最大长度n
  • int:整数类型
  • smallint:小整数类型
  • numeric(p,d):定点数,p位数字,d位小数
  • realdouble precision:浮点数与双精度浮点数
  • float(n):精度至少为n位的浮点数。

基本操作

首先连接mysql数据库

~#: mysql -u root -p
然后输入密码 

1、创建/删除数据库
命令:create/drop database DBName

mysql> create database Mytest;
mysql> drop database Mytest;

2、显示当前DBMS有多少个数据库
命令:show databases

mysql> show databases;

3、使用某个指定数据库
命令:use DBName

mysql> use Mytest;

4、查看数据库中的表【在执行3之后,即指定使用的数据库后】
命令:show tables;

mysql> show tables;

在这里插入图片描述
5、创建表
命令:create table TableName( A i A_i D i , D_i, ,< i 完整性约束_i >);

常见完整性约束:

  • primary key( A j m A_{jm} ):主键
  • foreign key( A j m A_{jm} ) reference:外键
  • not null:非空
mysql> create table department
                 (dept_name		varchar(20),
                  building		varchar(15),
                  budget		numeric(12,2),
                  primary key(dept_name);
mysql> create table course
				(course_id		varchar(7),
				 title			varchar(50),
				 dept_name		varchar(20),
				 credits		numeric(2,0),
				 primary key(course_id),
				 foreign key(dept_name) references department);
mysql>				                 

在这里插入图片描述
6、插入
命令:insert into TableName( A i A_i ) values( v a l u e i value_i )

mysql> insert into instructor(ID,name,dept_name,salary) values(10211,'Smith','Biology',66000);

在这里插入图片描述
7、删除
主要涉及两种操作:删除一条数据或清空表,保留关系(delete),删除表(delete)。
命令:delete from TableName
   delete from TableName where condition
   drop table TableName
在这里插入图片描述
8、属性的增、删
命令:alter table TableName add A A D D
    alter table TableName drop A A
在这里插入图片描述
9、数据的更新
命令:update TableName set A = n e w V a l u e A=newValue where condition
在这里插入图片描述
10、简单的查询
命令:select * from TableName where condition
说明:

  • select子句用于列出查询结果中所需要的属性
  • from子句是一个查询求值中需要访问的关系表
  • where子句是一个作用在from子句中关系属性上的谓词

11、字符串运算

  • 百分号(%):匹配任意字符串
  • 下划线(_):匹配任意一个字符

SQL中用运算符like来表达模式
在这里插入图片描述
12、聚集函数
聚集函数是以值的一个集合(集或多重集)为输入,返回单个值的函数。SQL提供了五个固有的聚集函数:

  • 平均值:avg
  • 最小值:min
  • 最大值:max
  • 总和:sum
  • 计数:count
    可以使用group by来进行分组聚集,在分组后还可以增加having子句进一步限定条件。

三、MySQL备忘单

1、枚举数据库配置和模式

提取MySQL服务器的配置信息
数据 查询
版本 SELECT @@version;
当前用户 SELECT user();
SELECT system_user();
列出用户权限 SELECT grantee,privilege_type,is_grantable
FROM information_shcema.user_privilege;

在这里插入图片描述

提取MySQL5.0及之后版本的模式信息
数据 查询
当前数据库 SELECT database();
列出数据库 SELECT schema_name FROM information_schema.schemata;
列出表 列出当前数据库中的表:
SELECT table_name FROM information_schema.tables
  WHERE table_schema=database();
列出所有用户自定义数据库中的所有表:
SELECT table_schema, table_name FROM information_schema.tables
  WHERE table_schema !=‘information_schema’ AND table_name!=‘mysql’;
列出列 列出当前数据库中department表的列名:
SELECT column_name FROM information_schema.columns
  WHERE table_name=‘department’;
列出所有用户自定义数据库中的所有列:
SELECT table_schema, table_name, column_name FROM information_schema.columns
 WHERE table_schema != ‘information_schema’ AND table_name!=‘mysql’;

2、盲注函数

MySQL盲注函数
数据 查询
字符串长度 LENGTH()
从给定字符串中提取字符串 SELECT SUBSTR(string,offset,length);
字符串(‘ABC’)不带单引号的表示方式 SELECT char(65,66,67);
触发时间延迟 BENCHMARK(count,expr);# 执行表达式expr count次
SLEEP(n);#触发一个n秒的延迟
IF语句 SELECT if(condition,expr1,expr2);# 条件为真返回expr1,否则返回expr2,常结合SLEEP函数

有SUBSTR实现的布尔盲注可参考实例
https://blog.csdn.net/Secur17y/article/details/102497529

3、攻击数据库服务器
1)执行系统命令

SELECT 'system_commands' INTO dumpfile trojanPath;

2)破解数据库口令

SELECT concat(user,":",password) FROM mysql.user;

3、读取文件

SELECT LOAD_DILE('etc/passwd');

4、写入文件

SELECT * FROM TableName INTO dumpfile '/tmp/hacker';

Reference
Mysql注入中的outfile、dumpfile、load_file函数详解

区别:DUMPFILE适用于二进制文件,它会将目标文件写入同一行;而OUTFILE则更适用于文本文件。

发布了25 篇原创文章 · 获赞 23 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Secur17y/article/details/102527292