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

来源:互联网 发布:无敌淘宝王全文免费 编辑:程序博客网 时间:2024/05/18 10:01

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


  1. 数据类型
数据类型 Access SQL Server Oracle MySQL 文本 varchar char,nchar, varchar,nvarchar,text char,nchar, varchar2,nvarchar2 CHAR,VARCHAR, TEXT[more] 长整型 integer int NUMBER(p[,s]) INT,INTEGER 整型 short smallint,tinyint NUMBER(p[,s]) TINYINT,SMALLINT, MEDIUMINT 双精度型 double,float decimal,numeric BINARY_DOUBLE 单精度型 single,real float,real BINARY_FLOAT FLOAT 字节型 byte 小数 NUMERIC(6,2) DECIMAL(M,D) 货币 currency,money money,smallmoney 日期/时间 date,time,datetime datatime DATE DATE,TIME, DATETIME 时间戳 TIMESTAMP TIMESTAMP TIMESTAMP 布尔 Boolean,Bit bit 二进制 Binary binaryvarbinary,image BLOB,CLOB,NCLOB, BFILE,RAW(n) TINYBLOB,BLOB OLE 对象 OLEObject 备注 text
详细参考 网址 Access http://www.cnblogs.com/Ryan_j/archive/2010/10/14/1851765.html SQL Server http://www.cnblogs.com/andy_tigger/archive/2011/08/21/2147745.html Oracle http://www.cnblogs.com/yshb/archive/2012/06/19/2554279.html MySQL http://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 源数据库..表

0 0
原创粉丝点击