什么是关系型和非关系型数据库
关系型数据库:指采用了关系模型来组织数据的数据库。 关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织 关系型数据库主要是Oracle,Microsoft SQL Server,MySQL,PostgreSQL,DB2, Microsoft Access,SQLite,Teradata,MariaDB(MySQL的一个分支),SAP。 非关系型数据库:指非关系型的,分布式的,且一般不保证遵循ACID原则的数据存储系统。 ACID原则如下图:
其实就是关系型数据库所遵守的原则。 关系型与非关系型各自的优点缺点可以参考这篇文章: https://www.jianshu.com/p/fd7b422d5f93
mysql中的字段类型:
主要包括以下五大类: 整数类型:BIT、BOOL、TINY INT、SMALL INT、MEDIUM INT、 INT、 BIG INT 浮点数类型:FLOAT、DOUBLE、DECIMAL 字符串类型:CHAR、VARCHAR、TINY TEXT、TEXT、MEDIUM TEXT、LONGTEXT、TINY BLOB、BLOB、MEDIUM BLOB、LONG BLOB 日期类型:Date、DateTime、TimeStamp、Time、Year 其他数据类型:BINARY、VARBINARY、ENUM、SET、Geometry、Point、MultiPoint、LineString、MultiLineString、Polygon、GeometryCollection等 创建数据库: 创建表以及列名
插入数据:
创建表时,每一列的数据类型都可以自己设置,比如id上的INT就是整形,NOT NULL意味着如果该列值不允许为空,AUTO_INCREMENT的意思就是递增,即每插入一条数据,id的值自增1,PRIMAPY是主键的意思,表示定义的该列值在表中是唯一的意思,不可以有重复。ENGINE为引擎,这里使用默认的InnoDB,CHARSET字符集设定为utf-8,在mysql5.0版本以上设定varchar(50)即可以放50个汉字,版本低的话一个utf-8的汉字相当于3个字节,只能放16个。 从菜鸟教程得知Mysql的数据类型也可以分为三个大类: 数值、日期/时间和字符串(字符)类型,所以这里的表刚好包含了这三种类型。
数据库的增删查改.
增即INSERT,添加数据时可以规定列添加。 删即 DELETE FROM table_name WHERE condition; 第一,指定删除数据的表(table_name)。 第二,使用条件来指定要在WHERE子句中删除的行记录。如果行匹配条件,这些行记录将被删除。如果省略WHERE子句,DELETE语句将删除表中的所有行。如果要限制要删除的行数,则配合Order By使用LIMIT子句。 DELETE FROM table_name ORDER BY c1, c2, … LIMIT row_count; 例如DELETE FROM sa WHERE sa_id=1即删除了第一行的全部数据,若不加WHERE,则会将整个表都删除干净。更多其他的删除操作参考这篇文章: 点这 查:查的话就用select 如图:
示例: 改:就用update语句 UPDATE table_name SET field1=new-value1, field2=new-value2 [WHERE Clause] 如图所示 这里就将sapphire改为了saaa并且指定是第一行。 这些就是简单的增删查改 LIKE子句的匹配例子:
'%a' //以a结尾的数据
'a%' //以a开头的数据
'%a%' //含有a的数据
'_a_' //三位且中间字母是a的
'_a' //两位且结尾字母是a的
'a_' //两位且开头字母是a的
mysql中自带的系统库和表:
1.information_schema 它提供了访问数据库元数据的方式, 其中保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等。在INFORMATION_SCHEMA中,有数个只读表。它们实际上是视图,而不是基本表,因此,你将无法看到与之相关的任何文件。 可以看到有很多系统表 2.performance_schema 这个功能默认是关闭的,需要设置参数才可开启,对于里面部分表的说明如图:
3.mysql 尝试看看user表里的内容 可以看到一些密码的哈希值 4.sys sys_config是该库中存在的唯一一个表: 解释:
Mysql读写文件
Mysql中涉及读写操作时,得看secure_file_priv参数,利用show global variables like “secure%”;查询得到 并没有显示ON 或者别的,百度了知道要修改my.cnf,在[mysqld]内加入secure_file_priv= 先不修改,尝试一下读取文件。结果为NULL,尝试百度的方法以后并没有能读取任意文件,那么我就在/var/lib/mysql-files里创建了一个1.txt,内容为123123123,。先在sapphire库中创建一个test表,然后用insert into test(cmd) values (load_file(’/var/lib/mysql-files/1.txt’));写入文件内容,select * from test读取文件内容,如图: 在实际的注入过程中load_file函数一般都会被禁掉,这个时候就得使用load data infile:
还可以使用system cat命令,但是远程连接时无法使用,只能本地执行
这些就大概是mysql读写文件的方法
|