Appearance
数据库入门
作为初学者必须要了解的几种常用数据库!
现在已经存在了很多优秀的商业数据库,如甲骨文(Oracle)公司的 Oracle 数据库、IBM 公司的 DB2 数据库、微软公司的 SQL Server 数据库和 Access 数据库。同时,还有很多优秀的开源数据库,如 MySQL 数据库,PostgreSQL 数据库等。下面介绍这些常见的数据库。
1)Oracle
Oracle 是甲骨文公司的一款关系型数据库管理系统,在数据库领域一直处于领先地位的产品,是目前世界上流行的关系型数据库之一,是一种高效率、可靠性好、适应高吞吐量的数据库方案。
Oracle图标
优点:
- Oracle 可移植性好,能在所有主流平台上运行(包括 Windows),完全支持所有工业标准。采用完全开放策略,使客户可以选择最适合解决方案。以及对开发商的全力支持。
- 获得最高认证级别的 ISO 标准认证,安全性高。
- 与其它数据库相比,Oracle 性能最高。保持着开放平台下 TPC-D 和 TPC-C 世界记录。
- 多层次网络计算,支持多种工业标准,可以用 ODBC、JDBC、OCI 等网络客户连接 。
- 完全向下兼容,因此被广泛应用,且风险低 。
向下兼容指的是高版本支持低版本的或者说后期开发的版本支持和兼容早期开发的版本。
缺点:
- 对硬件的要求高
- 价格比较昂贵
- 管理维护麻烦
- 操作比较复杂
2)SQL Server
SQL Server 是 Microsoft(微软)公司推出的关系型数据库管理系统,主要应用于大型的管理系统中。
SQL Server图标
优点:
- 与微软的 Windows 系列操作系统的兼容性很好。
- 高性能设计,可充分利用 WindowsNT 的优势。
- 系统管理先进,支持 Windows 图形化管理工具,支持本地和远程的系统管理和配置。
- 强壮的事务处理功能,采用各种方法保证数据的完整性。
- 支持对称多处理器结构、存储过程、ODBC,并具有自主的 SQL 语言。
缺点:
- SQL Server 只能在 Windows 系统上运行,没有丝毫开放性。
- 没有获得任何安全证书。
- 多用户时性能不佳 。
- 只支持 C/S 模式,SQL Server C/S 结构只支持 Windows 客户用 ADO、DAO、OLEDB、ODBC 连接。
3)MySQL
MySQL 是一种开放源代码的关系型数据库管理系统,由瑞典 MySQL AB 公司开发,属于 Oracle 旗下产品。因为其速度、可靠性和适应性而备受关注。MySQL 是流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL 是最好的应用软件之一。
MySQL图标
优点:
- 性能卓越服务稳定,很少出现异常宕机
- 开放源代码且无版权制约,自主性强、使用成本低。
- 历史悠久、社区及用户非常活跃,遇到问题,可以很快获取到帮助。
- 软件体积小,安装使用简单,并且易于维护,安装及维护成本低。
- 支持多种操作系统,提供多种 API 接口,支持多种开发语言。
缺点:
- MySQL 最大的缺点是其安全系统,主要是复杂而非标准,只有调用 mysqladmin 来重读用户权限才会发生改变。
- MySQL 不允许调试存储过程,开发和维护存储过程很难。
- MySQL 不支持热备份。
- MySQL 的价格随平台和安装方式变化。
4)Access
Access 是由 Microsoft(微软)发布的小型关系数据库管理系统,是微软把数据库引擎的图形用户界面和软件开发工具结合在一起的一个数据库管理系统。
Access图标
优点:
- 存储方式简单,易于维护管理。Access 的对象有表、查询、窗体、报表、页、宏和模块,以上对象都存放在后缀为(.mdb 或 .accdb)的数据库文件中,便于用户的操作和管理。
- Access 是一个面向对象的开发工具,这种基于面向对象的开发方式,使得开发应用程序更为简便。
- 界面友好、易操作。Access 是一个可视化工具,风格与 Windows 完全一样,用户想要生成对象应用,只要使用鼠标进行拖放即可,非常直观方便。系统还提供了表生成器、查询生成器、报表设计器以及数据库向导、表向导、查询向导、窗体向导、报表向导等工具,使得操作简便,容易使用和掌握。
- 集成环境,可以处理多种数据信息。Access 基于 Windows 操作系统下的集成开发环境,该环境集成了各种向导和生成器工具,极大地提高了开发人员的工作效率,使得建立数据库、创建表、设计用户界面、设计数据查询、报表打印等可以方便有序地进行。
- 支持广泛,易于扩展,弹性大。Access 是一个既可以只用来存放数据的数据库,也可以作为一个客户端开发工具来进行数据库应用系统开发。即可以开发方便易用的小型软件,也可以用来开发大型的应用系统。
缺点:
- 不支持并发处理。
- 数据库存储量小安全性不够高。
- Access 是小型数据库,当数据量过大时,一般百M以上(纯数据,不包括窗体、报表等客户端对象)性能会变差。
- 虽然理论上支持 255 个并发用户,但实际上根本支持不了那么多,如果以只读方式访问大概在 100 个用户左右,而如果是并发编辑,则大概在10-20个用户。
- 单表记录数过百万时,性能就会变得较差,如果加上设计不良,这个限度还要降低。
- 不能编译成可执行文件(.exe),必须要安装 Access 运行环境才能使用。
5)DB2
DB2 是美国 IBM 公司开发的一款支持多媒体、Web 的关系型数据库管理系统。主要应用于大型应用系统,具有较好的可伸缩性,可支持从大型机到单用户环境。
DB2图标
优点:
- 相比较 MySQL 和 Oracle 两种数据库来说,DB2 提供了高层次的数据利用性、完整性、安全性、可恢复性,以及小规模到大规模地应用程序执行能力,具有与平台无关的基本功能和 SQL 命令。
- DB2 采用了数据分级技术,能够使大型数据很方便的下载到数据库服务器,使数据库本地化和远程连接透明化。
- 拥有非常完备的查询优化器,改善了查询性能,并支持多任务并行查询。
- 具有很好的网络支持能力,每个子系统可以连接十几万个分布式用户,可同时激活上千个活动线程,对大型分布式应用系统更加使用。
- DB2 可跨平台使用。
缺点:
- 配置文件和参数多,且命名不规范。
- 一些 DB2 产品开发不方便。
- 和 Oracle 相比,命令多,且没 Oracle 统一规范的好。
- 由于其设计框架的问题,如果用户对数据库的本身优化和应用程序优化做的不足,那么 DB2 容易出现锁等待现象。
6)PostgreSQL
PostgreSQL 是一款富有特色的自由数据库管理系统,甚至可以说是最强大的自由软件数据库管理系统。该数据库管理系统支持了目前世界上最丰富的数据类型。是自由软件数据库管理系统中唯一支持事务、子查询、多版本并行控制系统、数据完整性检查等特性的自由软件。
PostgreSQL图标
优点:
- PostgreSQL 遵循的是 BSD 协议,是一个完全开源、免费、同时非常强大的关系型数据库。
- 与 PostgreSQL 配合的有很多分布式集群软件,如 pgpool、pgcluster、slony、plploxy 等等,很容易做读写分离、负载均衡、数据水平拆分等方案,而这些 MySQL 则比较难实现。
- PostgreSQL 源代码写的很清晰,易读性比 MySQL 强,所以很多公司基本都是以 PostgreSQL 做二次开发的。
- PostgreSQL 是多进程的,而 MySQL 是多线程的。并发不高时,MySQL处理速度快,但当并发高的时候,对于现在多核的单台机器上,MySQL 的总体处理性能不如 PostgreSQL,原因是 MySQL 的线程无法充分利用 CPU 的能力。
- PostgreSQL 有很强大的查询优化器,支持很复杂的查询处理。
BSD 开源协议是一个给于使用者很大自由的协议。可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。
缺点:
- 对于简单而繁重的读取操作,相比较其它数据库来说,PostgreSQL 性能较低。
- PostgreSQL 数据库扩容花费时间很长。
学MySQL前,需要了解这些数据库专业术语
在正式学习 MySQL 数据库前,我们有必要先了解一下数据库中的专业术语。下面汇总了一些在学习 MySQL 过程中会遇到的专业术语。
数据库管理系统(DBMS)是位于操作系统与用户之间的一种操纵和管理数据库的软件。关系型数据库通过关系数据库管理系统(RDBMS)进行管理。
关系(Relational,即 RDBMS 里的 R)表示这是一种特殊的 DBMS,数据库中表与表之间要存在关系。
数据库(DataBase,即 RDBMS 里的 DB)是一个用来存储和管理数据的仓库。它的存储空间很大,并且有一定的数据存放规则。通过由行和列组成的二维表(类似 Excel 工作表)来管理数据。数据库中可以同时存储多个表。
管理系统(Management System,即 RDBMS 里的 MS)是一个软件,我们可以通过它来插入(insert)、查询(query)、修改(modify)或删除(delete)表中的数据。
用来管理数据的二维表在关系数据库中简称为表(Table),每个表由多个行(Row)和列(Column)组成。
表的列(垂直方向)称为字段,是具有相同数据类型的数据集合。表的行(水平方向)称为记录(Record),相当于一条数据。记录可以包含多项信息,表中的每一列都对应于其中的某一项。
下图是一个统计学生信息的 student 表。可以看到,每个列都包含了所有学生的某个信息,比如 name(姓名)。而每行则包含了某个学生的所有信息,即 id(编号)、name(姓名)、 age (年龄)、stuno(学号)等。
SQL(Structured Query Language,结构化查询语言)是用来操作关系型数据库的语言,使用 SQL 可以对数据库和表进行添加、删除、修改和查询等操作。
与其它计算机语言一样,初次接触 SQL 的人肯定会觉得它很奇怪。例如,在创建表时,很多人都会把表与图表或图片联系起来,但是 MySQL 不是这样的。在 MySQL 中创建表时,你必须输入类似下面这样的内容。
- CREATE TABLE
student
( id
int(4),name
varchar(20),age
int(4),stuno
int(11),- PRIMARY KEY (
id
) - ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
如果你对 SQL 还不太熟悉,可能会对以上语句心生畏惧。不过请放心,随着教程的深入学习,你会很快的熟练使用 SQL,并且对上述 SQL 语句的看法也会悄然地发生变化。它不再是一组怪诞地表达,而是一种有助于信息描述的强大工具。
明白了MySQL内部结构才能成为高手!
麻雀虽小,五脏俱全。MySQL 虽然以简单著称,但其内部结构并不简单,本节主要介绍 MySQL 的整体架构组成。
学习 MySQL 就好比盖房子,如果想把房子盖的特别高,地基一定要稳,基础一定要牢固。学习 MySQL 数据库前要先了解它的内部结构,这是学好 MySQL 数据库的前提。
MySQL 由连接池、SQL 接口、解析器、优化器、缓存、存储引擎等组成,可以分为三层,即 MySQL Server 层、存储引擎层和文件系统层。MySQL Server 层又包括连接层和 SQL 层。如下是官方文档中 MySQL 的基础架构图:
MySQL基础架构图
上图中,Connection pool 为连接层,Management Services & Utilities ...Caches & Buffers 为 SQL 层,Pluggable Storage Engines 为存储引擎层,File system、Files & Logs 为文件系统层。
Connectors 不属于以上任何一层,可以将 Connectors 理解为各种客户端、应用服务,主要指的是不同语言与 SQL 的交互。
1. 连接层
应用程序通过接口(如 ODBC、JDBC)来连接 MySQL,最先连接处理的是连接层。连接层包括通信协议、线程处理、用户名密码认证 3 部分。
- 通信协议负责检测客户端版本是否兼容 MySQL 服务端。
- 线程处理是指每一个连接请求都会分配一个对应的线程,相当于一条 SQL 对应一个线程,一个线程对应一个逻辑 CPU,在多个逻辑 CPU 之间进行切换。
- 密码认证用来验证用户创建的账号、密码,以及 host 主机授权是否可以连接到 MySQL 服务器。
Connection Pool(连接池)属于连接层。由于每次建立连接都需要消耗很多时间,连接池的作用就是将用户连接、用户名、密码、权限校验、线程处理等需要缓存的需求缓存下来,下次可以直接用已经建立好的连接,提升服务器性能。
2. SQL层
SQL 层是 MySQL 的核心,MySQL 的核心服务都是在这层实现的。主要包含权限判断、查询缓存、解析器、预处理、查询优化器、缓存和执行计划。
- 权限判断可以审核用户有没有访问某个库、某个表,或者表里某行数据的权限。
- 查询缓存通过 Query Cache 进行操作,如果数据在 Query Cache 中,则直接返回结果给客户端,不必再进行查询解析、优化和执行等过程。
- 查询解析器针对 SQL 语句进行解析,判断语法是否正确。
- 预处理器对解析器无法解析的语义进行处理。
- 查询优化器对 SQL 进行改写和相应的优化,并生成最优的执行计划,就可以调用程序的 API 接口,通过存储引擎层访问数据。
Management Services & Utilities、SQL Interface、Parser、Optimizer 和 Caches & Buffers 属于 SQL 层,详细说明如下表所示。
名称 | 说明 |
---|---|
Management Services & Utilities | MySQL 的系统管理和控制工具,包括备份恢复、MySQL 复制、集群等。 |
SQL Interface(SQL 接口) | 用来接收用户的 SQL 命令,返回用户需要查询的结果。例如 SELECT FROM 就是调用 SQL Interface。 |
Parser(查询解析器) | 在 SQL 命令传递到解析器的时候会被解析器验证和解析,以便 MySQL 优化器可以识别的数据结构或返回 SQL 语句的错误。 |
Optimizer(查询优化器) | SQL 语句在查询之前会使用查询优化器对查询进行优化,同时验证用户是否有权限进行查询,缓存中是否有可用的最新数据。它使用“选取-投影-连接”策略进行查询。 例如 SELECT id, name FROM student WHERE gender = "女"; 语句中,SELECT 查询先根据 WHERE 语句进行选取,而不是将表全部查询出来以后再进行 gender 过滤。SELECT 查询先根据 id 和 name 进行属性投影,而不是将属性全部取出以后再进行过滤,将这两个查询条件连接起来生成最终查询结果。 |
Caches & Buffers(查询缓存) | 如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。这个缓存机制是由一系列小缓存组成的,比如表缓存、记录缓存、key 缓存、权限缓存等。 |
3. 存储引擎层
Pluggable Storage Engines 属于存储引擎层。存储引擎层是 MySQL 数据库区别于其他数据库最核心的一点,也是 MySQL 最具特色的一个地方。主要负责 MySQL 中数据的存储和提取。
因为在关系数据库中,数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型)。
4. 文件系统层
文件系统层主要是将数据库的数据存储在操作系统的文件系统之上,并完成与存储引擎的交互。
说明:学习阅读完本节内容,了解 MySQL 体系结构即可,教程后面会详细介绍每个模块。
小白学习MySQL需要多长时间,能从事哪方面的工作?
MySQL 作为目前最为活跃热门的开源数据库之一,具有低成本和简易操作的特点。在炙手可热的 BAT(百度、阿里巴巴、腾讯)中,都大量使用了 MySQL。显然,对于想在互联网行业大展手脚的数据库工程师和 DBA 们,熟练 MySQL 无疑是一块很好的敲门砖。
每个人的情况不同,自称小白的人基本有以下 3 类:
1)求职储备(无工作经验)
没有相关经验,还没有走上工作岗位,只是对 MySQL 感兴趣或者好奇
2)DBA萌新(较少工作经验)
刚入行的新手,或者有少量经验的 DBA 新人,经常会发现实际工作和网上说的不一样
3)工作中会用到(有工作经验)
可能是开发类的同学,有一定工作经验,工作中要用到 MySQL 数据库,只是简单用,想深入学习一下
对于 MySQL 的学习周期和难度,大家是很关心的。下面我们用比较成熟的商业数据库 Oracle 作为参考,来对比学习 MySQL 的一些特点。
数据库名称 | Oracle | MySQL |
---|---|---|
数据库类型 | 商业闭源 | 开源 |
功能完善情况 | 非常齐全 | 比较齐全 |
学习周期 | 长 | 较短 |
学习难度(入门) | 难 | 容易 |
学习难度(深入) | 难 | 更难 |
Oracle到MySQL | \ | 相对容易 |
MySQL到Oracle | 难 | \ |
深度进阶 | 内核、调试 | 源码定制、改造 |
从技术栈上来说,MySQL 的入门周期相对要短,学习难度较容易。但是如果要深入了解使用,因为其开源和社区的原因,发展空间更大,相对也就更难。另外,MySQL DBA 的“钱途”从市面需求来说也要好一些。
从我的理解中,MySQL 主要有 3 个知识层面,即运维管理,架构优化和运维开发。
1)运维管理
运维管理主要就是基础运维的工作(安装部署,备份恢复,权限管理之类的工作)和一些变更类管理和规范操作(在线变更,数据库复制,SQL 规范等工作),这部分工作上手较快。
2)架构优化
架构和优化涉及的工作面比较宽,而且技术要求有一定的深度,主要分为 SQL 查询优化,事务和锁,MySQL 集群和高可用技术,分布式数据库架构等。这部分工作中对于很多开发同学来说,要注重于查询优化。而对于从初级走向中高级的 DBA 来说,则要更注重于相关的锁机制、集群和高可用相关技术。
3)运维开发
运维开发的工作不是简单的数据库自动化运维,而是分为应用层和内核。我们常说的运维开发是偏向于应用层的,比如数据库管理工具等。而内核层需要掌握源码开发能力,比如开发数据库中间件,SQL 审核工具等。
MySQL 主要从事以下 3 方面工作。
1)技术支持工程师。
MySQL 只是该工作技能之一。掌握 MySQL 安装,维护和基本操作就可以。基本月薪 6K~10K。
2)系统集成工程师。
MySQL 只是该工作技能之一。掌握 MySQL 安装,维护和基本操作就可以。基本月薪 6K~10K。
3)数据库工程师。
这个就分很多种了,主要看 MySQL 的掌握程度。一般的是 MySQL 数据库管理员。基本月薪 10K~15K。
高大上的有数据分析工程师,数据库开发工程师,数据库建模工程师,数据库挖掘工程师等,这类需要掌握 Oracle 数据库。基本月薪 15K~28K。
当前市场对数据库程序员的需求如何?待遇如何?
数据库开发人员和维护人员在市场上一直都是急缺人才。
如果想往 DBA 这个方向发展,那么 Oracle、MySQL、DB2 或非关系型数据库(如 MongoDB、Redis 等)都可以。
在 Oracle 收购 MySQL 后,MySQL 的发展势头也不错,大公司也都在将部分数据库往 MySQL 迁移,例如阿里巴巴、盛大网络等等公司的部分数据库,很多都使用的是 MySQL 数据库。所以,市场上也有很大一部分的 MySQL DBA 的需求。
Oracle 自然就不用说了,关系型数据库中的老大,大部分有实力的公司使用的都是 Oracle 或者 DB2 与 MySQL 的结合。如果都使用 Oracle,则成本太高,使用 DB2 一般都能享受到 IBM 提供的一条龙服务,从服务器到数据库再到数据库管理软件,DB2 大部分都应用于金融领域。SQL Server 的使用者相对较少,主要因为微软的软件对平台依赖性比较大,发展受到了限制。不过现在微软在开发基于 Linux 平台的 SQL Server。
有关待遇方面,可以看看智联网给出的 DBA 的薪资:
总体而言,在有工作经验的情况下,在上海、北京这些一线城市中,最低的工资水平都可以达到1万元/月以上,二线城市在7000元/月左右,具体月薪,因人而异。
那么数据库程序员有哪些可供选择的职业发展道路呢?
一般来说,可供数据库程序员选择的职业发展道路有以下几个:数据库开发转 DBA,DBA 升项目经理、技术总监,转行做技术销售,大数据、云计算和数据库架构师等。
下面分析一下各类数据库求职及市场使用情况。如下是 DB-Engines(该网站统计全球数据库的排行榜)网站发布的 2020 年 8 月份的数据库排名,前 10 名排名情况如下图所示。
在上图中,Oracle、MySQL 和 Microsoft SQL Server 仍占据前三名。Oracle 排名第一,得分呈上升趋势,与上月相比多了 14.9,与去年同期相比多了 15.68。第二名的 MySQL 得分与上月相比有所下降,与去年同期相比多了 7.89。第三名的 Microsoft SQL Server 得分较上月多了 16.15,与去年同期相比,得分有所下降。此外,PostgreSQL 数据库排名也有所上升趋势。
下面是每个数据库的变化趋势。
可以看到,前 3 名一直保持着远高于其它数据库的地位。需要注意的是,以上榜单分析只能在为数据库相关从业人员提供一个技术方向的参考,其中涉及的排名情况并非基于产品的技术先进程度或市场占有率等因素。无论排名先后,选择适合于企业业务需求相匹配的技术,才是最重要的。
目前对于市场上数据库的求职,主要以 Oracle 和 MySQL 为主。对于 NoSQL 的要求,一般都是包含在 Oracle 和 MySQL 之内的,要求精通 Oracle 或 MySQL,熟悉一种 NoSQL 数据库。
Oracle 主要在传统行业招聘,而 MySQL 主要在互联网行业招聘。
DBA到底要做什么,成为一名DBA需要具备什么能力?
DBA 是数据库管理员(Database Administrator)的简称,是从事管理和维护数据库管理系统(DBMS)的相关工作人员的统称,属于运维工程师的一个分支。
DBA 主要负责业务数据库从设计、测试到部署交付的全生命周期管理,它的核心目标是保证数据库管理系统的稳定性、安全性、完整性和高性能。
在国外,也有公司把 DBA 称作数据库工程师(Database Engineer),两者的工作内容基本相同,都是保证数据库服务24小时的稳定高效运转。
DBA 与数据库开发工程师不同,DBA 的主要职责是运维和管理数据库管理系统,侧重于运维管理。而数据库开发工程师的主要职责是设计和开发数据库管理系统和数据库应用软件系统,侧重于软件研发。
DBA 主要负责以下几个方面:
- 设计数据库,包括表和字段
- 监视监控数据库日志
- 数据库备份与恢复
- 数据库用户密码和权限的管理/数据库安全
- 检查 SQL 语句是否符合规范
对 DBA 而言,掌握数据库的基本知识是必不可少的。从数据库的操作角度而言,SQL 语句才是基础中的基础。 DBA 一方面要根据需求在数据库中实现某些功能,另一方面要指导非数据库专业人士在数据库中完成他们想要实现的功能,所以,数据库中很多细节性的东西都需要 DBA 去掌握。
另外,还需要了解数据库架构方面和 SQL 底层的一些知识。例如,一般情况下,学过数据库的人都知道索引对提高查询性能十分重要,但却不知道过多的索引也会给数据的处理带来负担。如果不了解索引的内部实现机制以及 SQL 使用索引的原理,那么就无法合理地创建索引。
在实现了用户的需求后,接下来的工作就是维护。再好的数据库架构,也需要经常被维护和保养。例如,原来很有效的索引因为索引碎片的增多,读取的性能就会下降。因为业务的变化,有的索引被删除,我们要保证重要的数据不会丢失,敏感的数据不会被不该访问的人访问。这一系列的问题,除了要调查、分析,并制订出一套完整的方案外,还需要相关的知识来实施这套方案。
日常维护的过程中会遇到非常多的问题,这些问题除了 SQL 的问题外,很多是跟系统或者网络相关的,甚至是程序中出现的问题需要调试。所以,对于一名优秀的 DBA 而言,操作系统、计算机网络与通信、程序设计语言等相关知识都需要有所涉猎。
为了管理好数据库,特别是管理好多台服务器,DBA 有时也需要编写工具来辅助完成任务。所以,懂 Shell 或 Python 也是必不可少的。
通过上面的分析,可以得出 DBA 需要的技能如下:
- 熟练掌握数据库知识,包括 SQL 语言、备份、恢复、管理、数据库结构知识、数据库运行原理。
- 至少熟练掌握一种数据库,了解其他数据库(有一定应用能力)。实际应用中,很少有不与其他类型数据库交互的数据库,如果只熟练掌握一种数据库,那么当需要与其他数据库交互时,就会无从下手。
- 综合应用能力,有一定的程序设计能力,包括操作系统、网络与安全等知识。
DBA 主要有 ORACLE、MySQL、DB2、SQLSERVER 等方向。按照简单容易上手依次排为 SQL SERVER、MySQL、ORACLE。这里对 DB2 不做解释。
SQL SERVER 建议大家学习 .NET,MySQL、ORACLE 建议大家学习 JAVA。因为 SQL SERVER 和 .NET 是一家公司的,MySQL,ORACLE 和 JAVA 是属于一家公司的,数据接口都比较方便,兼容比较好。