MYSQL与MSSQL比较、MSSQL报错注入
-
mysql
1.弱类型语言
-
mssql
- 强类型语言
-
orcale
- 强类型语言
-
access
1. sql server和mysql数据库的区别
函数的区别
- db_name() 和 database()
- current_user 和 user()
- substring() 和 substr()
- char(97) and ascii(97) ascii的转换
- mysql中连接多列用 concat(); mssql中是 ‘a’+‘b’
- mysql有聚合函数group_concat();mssql无聚合函数,要用到top 1 结合 not in top
- mysql用读取一行用limit,mssql用top,orcale用where rownum=1
- @@version and version()
- mssql使用@@version查版本号,第一个字符是M
- mysql使用version查版本号,第一个字符是数字
- 在mysql中 information.schama;在mssql中 master…sysdatabases 或 master.dbo.sysdatabases,其中dbo表示用户名
- …
后端语言
- asp,aspx 和 mssql组合
- jsp 与 orcale 结合
- php 和 mysql 结合
2.mssql数据库
2.1 mssql的内置函数
current_user – 返回用户名
host_name() :返回服务器端计算机名称
db_name () :返回当前数据库的名称
subString () :字符串截取函数
@@version:查看数据库版本
ISNULL() :判断查询是否带有NULL,有则替换
CAST(a as type) 字符类型转换,如果转换失败会将a结果显示在页面上
CHAR() :ascii转字符函数
object_id() 根据表名返回数据库表名ID
object_name() 根据ID返回数据库表名
col_name ( object_id , column_id )函数 :返回指定表中指定字段(列)的名称
2.2 mssql内置表
- sysdatabases:值存在master数据库,保存了所有的库名以及库的ID。name存放数据库名。
查询库名两种方式
select substring((select top 1 name from master.dbo.sysdatabases
where name not in (select top 4 name from master..sysdatabases)),1,1);
select substring((select db_name()),1,1)
-
sysobjects:每个数据库都有此系统表,它存放该数据库内创建的所有对象
-
Name:表示数据库对象名
-
id:对象ID。每个表都唯一对应一个id
-
xtype:对象类型
-
uid:所有者对象的用户ID
-
status:对象的状态。
ype=‘U’ and status>0代表是用户建立的表,对象名就是表名,对象ID就是表的ID值。
-
查询表名两种方式
1. 根据内置函数---object_id() 根据表名返回数据库表名ID
2. 查表对应的id
-
syscolumns:位于每个数据库中。
-
name:字段名称
-
id:表ID号。表示表名,所有表名都用id表示
-
colid:字段ID号(id是用sysobjects得到的表的id号)
-
xtype=‘U’:代表是用户建立的表。在查询中,可以用xtype='U’做限制条件,只获取用户创建的表,这些表中的信息更敏感。
ect name from syscolumns
where id=(select id from 数据库名…sysobjects where name=‘表名’)
– 常用语法
-
3.orcale数据库
- 没有数据库的概念
- 不同的用户,权限不一样,查询的表不一样
3.1 特殊表
dual表
user_tab
user_tab_columns
1. select banner from sys.v_$version where rownum=1
-- sys.v_$version 用来表示版本
2. select user from dual
-- 找到当前用户名
3. select username from dba_users
-- 获取所有用户名
3.2 内置函数
mysql | mssql | orcale |
---|---|---|
length() | len() | length() |
ascii(),char() | char() | ascii() |
limit 0,1 | top 1 | rownum=1 |
substr() | substring() | substr() |
group_concat() | group_concat() (与group by联合使用) | wm_concat() |
SELECT student_id, GROUP_CONCAT(courses_id) AS courses
FROM student_courses WHERE student_id=2 GROUP BY student_id
SELECT order_num, COUNT(*) AS items FROM OrderItems GROUP BY order_num HAVING COUNT(*) > 3; //对某些符合的数据进行分组聚合,然后用having过滤
3.3 字符串拼接
- mysql—用concat(’’,‘abc’,’’)
- mssql— ‘a’+‘b’
- orcale— ‘a’||‘b’