一、元数据库
1、Mysql
information_schema数据库;
其中的表有:information_schema.tables和information_schema.columns(存储了整个Mysql的表和整个Mysql的列值);
其中的information_schema.tables的table_name列和table_schema列存储了数据库的表名和数据库的库名;
information_schema.columns的column_name和table_name存储了数据库的列名和数据库的表名。
2、Sql server
sql server在每次新建一个数据库时都会新建一个系统视图,主要分为information_schema和sys两类。
(1)information_schema数据表
其中的table_schema的值为dbo接下来的元信息库的数据信息就和mysql的一样了。
(2)sys视图表
sys.all_objects(或者sys.objects)(或者sys.sysobjects)里的name列存储了所有的表名
sys.all_columns(或者sys.columns)(或者sys.syscolumns)里的name列存储了所有的列名
sys.databases(或者sys.sysdatabases)里的name列存储了所有的数据库名
sys.schemas里的name列存储了数据库的用户权限
sys.servers里的name列存储了当前计算机名
sys.sql_logins里的name列存储了当前登录的用户
sys.tables里的name列存储了当前数据库的表名
sys.sysusers里的name列存储了所有的用户名
(3)Sql server里的元函数
1.返回列的定义长度
col_length(‘table‘,‘column‘)
2.返回列的名称
select * from sys.columns或者col_name(table_id,column_id)
3.返回数据库的名称
select * from sys.databases或者db_name(database_id)
4.返回数据库对象的表示id
object_id(‘表名或者数据库名‘)
3、Oracle
Oracle在每次创建用户的时候,都会创建一个用户名称对应的数据库(默认数据库)。
Oralce数据库将元数据存放到静态数据字典视图(SYS数据库)。
dual表,oracle特有的表,虚拟表,用于显示oracle查询语句结果查看
user_tables表,其中的table_name列是当前数据库的表名
all_tables表,其中的owner列是所有数据库名,其中的table_name列是所有的数据库表名
user_tab_columns表,其中的table_name列是当前数据库表名,column_name列是当前数据库字段名
二、分页符
1、Mysql
从你的表中的第0个数据开始,只读取一个
limit 0,1
2、Sql server
取前三条数据
select top 3 * from table
取数据的前百分之20
select top 20 percent * from table
取出一条数据,但name不等于第一条值的数据
select top 1 name,1,null from sys.tables where name not in (select top 1 name from
sys.tables)
取出一条数据,但name不等于前n条值的数据
select top 1 name,1,null from sys.tables where name not in (select top n name from
sys.tables)
3、Oralce
oracle限制查询条数--rownum用法详解:
https://blog.csdn.net/qq_26222859/article/details/72957661
对于rownum来说它是oralce系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数,且rownum不能以任何表的名称作为前缀。
(1)rownum对于等于某值的查询条件
where rownum=1(返回第一条)
where rownum=2(出错)
(2)rownum对于大于某值的查询条件
如果想查找二行以后的记录,可以使用一下的子查询方法来解决。
注意:子查询中的rownum必须要有别名,否则还是不会查出记录来,这是因为rownum不是某个表的列,如果不起别名,无法知道知道rownum是子查询的列还是主查询的列
select * from(select rownum no,table_name from user_tables) where no>2
(3)对于小于某值的查询条件 rownum对于rownum<n((n>1的自然数)的条件认为是成立的,所以可以找到记录。
select rownum,id,name from student where rownum <3;
(4)如果查询某区间的数据,必须是有子查询。
select * from (select rownum no,id,name from student where rownum<=3 ) where no >=2;
三、报错注入与盲注
经验说明:
sql server和oracle的报错注入和盲注,直接使用sqlmap即可。
个人构造语句编写脚本意义不大。
Sql Server、Oracle、Mysql查询语法的区别