Access, SQL Server, Oracle, MySQL的区别与相似

由于在自己的工作中不断会遇到各个数据库之间的兼容问题,而各个数据库之间虽说大部分SQL语句是可以通用的,但是每个数据库的数据类型还是有一些区别,而且也有自己特有的语法或者函数,这里根据自己曾碰到的各类区别总结一下。


  1. 数据类型
数据类型AccessSQL ServerOracleMySQL
文本varcharchar,nchar, varchar,nvarchar,textchar,nchar, varchar2,nvarchar2CHAR,VARCHAR, TEXT[more]
长整型integerintNUMBER(p[,s])INT,INTEGER
整型shortsmallint,tinyintNUMBER(p[,s])TINYINT,SMALLINT, MEDIUMINT
双精度型double,floatdecimal,numericBINARY_DOUBLE
单精度型single,realfloat,realBINARY_FLOATFLOAT
字节型byte
小数NUMERIC(6,2)DECIMAL(M,D)
货币currency,moneymoney,smallmoney
日期/时间date,time,datetimedatatimeDATEDATE,TIME, DATETIME
时间戳TIMESTAMPTIMESTAMPTIMESTAMP
布尔Boolean,Bitbit
二进制Binarybinaryvarbinary,imageBLOB,CLOB,NCLOB, BFILE,RAW(n)TINYBLOB,BLOB
OLE 对象OLEObject
备注text

详细参考网址
Accesshttp://www.cnblogs.com/Ryan_j/archive/2010/10/14/1851765.html
SQL Serverhttp://www.cnblogs.com/andy_tigger/archive/2011/08/21/2147745.html
Oraclehttp://www.cnblogs.com/yshb/archive/2012/06/19/2554279.html
MySQLhttp://www.cnblogs.com/bukudekong/archive/2011/06/27/2091590.html

2应用场景
2.1 Access
Access适合入门级应用,最大能存2G数据,实在不值一提,但由于我的客户太low总把access当excel用,稀里糊涂的往里录入一些零散的数据,然后让我把它导入到其他数据库。
2.2 SQL Server
MS SQL Server主要面向中小企业。其最大的优势就是在于集成了MS公司的各类产品及资源,提供了强大的可视化界面、高度集成的管理开发工具,在快速构建商业智能(BI)方面颇有建树。 MS SQL Server是MS公司在软件集成方案中的重要一环,也为WIN系统在企业级应用中的普及做出了很大贡献。
主要应用在windows生态系统的产品,好处坏处都很分明。好处就是,高度集成化,微软也提供了整套的软件方案,基本上一套win系统装下来就齐活了。因此,不那么缺钱,但很缺IT人才的中小企业,会偏爱 MS SQL Server 。例如,自建ERP系统、商业智能、垂直领域零售商、餐饮、事业单位等等。
2.3 Oracle
Oracle是一个非常典型的关系数据库。因此也变的严谨、安全、高速、稳定,并且变的越来越庞大。
由于其诞生早、结构严谨、高可用、高性能等特点,使其在传统数据库应用中大杀四方,金融、通信、能源、运输、零售、制造等各个行业的大型公司基本都是用了Oracle,早些年的时候,世界500强几乎100%都是Oracle的用户。
主要在传统行业的数据化业务中,比如:银行、金融这样的对可用性、健壮性、安全性、实时性要求极高的业务;零售、物流这样对海量数据存储分析要求很高的业务。此外,高新制造业如芯片厂也基本都离不开Oracle;电商也有很多使用者,如京东(正在投奔Oracle)、阿里巴巴(计划去Oracle化)。而且由于Oracle对复杂计算、统计分析的强大支持,在互联网数据分析、数据挖掘方面的应用也越来越多
2.4 MySQL
MySQL基本是生于互联网,长于互联网。其应用实例也大都集中于互联网方向,MySQL的高并发存取能力并不比大型数据库差,同时价格便宜,安装使用简便快捷,深受广大互联网公司的喜爱。并且由于MySQL的开源特性,针对一些对数据库有特别要求的应用,可以通过修改代码来实现定向优化,例如SNS、LBS等互联网业务


3架构
3.1 SQL Server
数据架构基本是纵向划分,分为:Protocol Layer(协议层), Relational Engine(关系引擎), Storage Engine(存储引擎), SQLOS。SQL执行过程就是逐层解析的过程,其中Relational Engine中的优化器,是基于成本的(CBO),其工作过程跟Oracle是非常相似的。在成本之上也是支持很丰富的HINT,包括:连接提示、查询提示、表提示。
3.2 Oracle
数据文件包括:控制文件、数据文件、重做日志文件、参数文件、归档文件、密码文件。这是根据文件功能行进行划分,并且所有文件都是二进制编码后的文件,对数据库算法效率有极大的提高。由于Oracle文件管理的统一性,就可以对SQL执行过程中的解析和优化,指定统一的标准:
RBO(基于规则的优化器)、CBO(基于成本的优化器)
通过优化器的选择,以及无敌的HINT规则,给与了SQL优化极大的自由,对CPU、内存、IO资源进行方方面面的优化。
3.3 MySQL
最大的一个特色,就是自由选择存储引擎。每个表都是一个文件,都可以选择合适的存储引擎。常见的引擎有 InnoDB、 MyISAM、 NDBCluster等。但由于这种开放插件式的存储引擎,比如要求数据库与引擎之间的松耦合关系。从而导致文件的一致性大大降低。在SQL执行优化方面,也就有着一些不可避免的瓶颈。在多表关联、子查询优化、统计函数等方面是软肋,而且只支持极简单的HINT。


4基本SQL语句
1、创建数据库
CREATE DATABASE database-name
2、删除数据库
drop database dbname
3、创建新表
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
4、 删除新表
drop table tabname
5、 增加一列
Alter table tabname add column col type
6、删除一列
alter table table_name drop字段名;
7、添加主键
Alter table tabname add primary key(col)
8、创建索引
create [unique] index idxname on tabname(col….)
9、 删除索引
drop index idxname
10、创建视图
create view viewname as select statement
11、 删除视图
drop view viewname
12、几个简单的基本的sql语句
查询:select * from table1 where 范围
插入:insert into table1(field1,field2) values(value1,value2)  
删除:delete from table1 where 范围
更新:update table1 set field1=value1 where 范围
查找:select * from table1 where field1 like ‘%value1%’
排序:select * from table1 order by field1,field2 [desc]
总数:select count(field1) as totalcount from table1
求和:select sum(field1) as sumvalue from table1
平均:select avg(field1) as avgvalue from table1
最大:select max(field1) as maxvalue from table1
最小:select min(field1) as minvalu minvalu from table1
13、使用外连接
A、left outer join:
左外连接(左连接):结果集包括连接表的匹配行,也包括左连接表的所有行。
select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
B:right outer join:
右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。
C:full outer join:
全外连接:不仅包括符号连接表的匹配行,还包括两个连中有记录
几个高级的语句
14、复制表(只复制结构,源表名:a 新表名:b)
Access:
法一:select * into b from a where
法二:select top 0 * into b from a
Sql Server:
     SELECT Id,FirstName,LastName,Weight,Height INTO People FROM Person(NOLOCK) WHERE 1=0
Oracle、MySql:
      CREATE TABLE People AS SELECT Id,FirstName,LastName,Weight,Height FROM Person WHERE 1=0
15、拷贝表(拷贝数据,源表名:a 目标表名:b)
insert into b(a, b, c) select d,e,f from b;
16、跨数据库之间表的拷贝(具体数据使用绝对路径)
Access:
     insert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件    
     例子:..from b in ’ “&Server.MapPath(“.”)&”\data.mdb” &”’ where..
SQL Server:
  当表目标表存在时:
insert into 目的数据库..表 select * from 源数据库..表

当目标表不存在时:
select * into 目的数据库..表 from 源数据库..表

如果在不同的SQL之间:
insert into openrowset(‘sqloledb’,’目的服务器名’;’sa’;”,目的数据库.dbo.表)
select *from 源数据库..表

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值