数据库学习之多种数据库横向对比

  • 前言
  • 横向对比
  • 区别分析
    • MySQL
    • PostgreSQL
    • Oracle
    • SqlServer
    • 其他
  • 技术分析
    • 获取数据库(database)
    • 获取约束(schema)
    • 获取表(table)
  • 相关概念
    • 表空间(tableSpace)
  • 参考链接

前言

  • 场景描述

    获取表结构(字段+索引)列表信息,需要适配多种类型数据库,其中主要包括MySQL、PostgreSQL、Oracle、SqlServer、KingBase、达梦和oscar等,下面针对这些数据库做简要对比。

横向对比

  • 总览说明

区别分析

MySQL

  • schema

    在MySQL中创建一个Schema和创建一个Database的效果类似。

PostgreSQL

  • tablespace

    PostgreSQL的tablespace代表一个操作系统目录(directory),在创建SQL对象时,可以为其指定tablespace,表示将该对象存放在tablespace对应的目录下的文件中。

  • schema

    PostgreSQL中模式的概念与MySQL中Database的概念是等同的。在MYSQL中可以同时访问多个Database对象,但在PostgreSQL中只能访问一个Database对象,但在PostgreSQL中可以访问多个Schema

  • 获取方式

    pg 能够根据ip和端口获取所有的database,然后根据database,获取下面所有的schema信息

  • 其他

    表空间是一个存储区域,在一个表空间中可以存储多个数据库,尽管PostgreSQL不建议这么做,但我们这么做完全可行。一个数据库并不直接存储表结构等对象的,而是在数据库中逻辑创建了至少一个模式,在模式中创建了表等对象,将不同的模式指派该不同的角色,可以实现权限分离,又可以通过授权,实现模式间对象的共享,并且还有一个特点就是:public模式可以存储大家都需要访问的对象

    既然一个表在创建的时候可以指定表空间,那么就可以给一个表指定它所在的数据库表空间之外的表空间。但这样做违背了表属于模式,而模式属于数据库,数据库最终存在于指定表空间这个网的模型。

    部分情况需要这样做:将表的数据存在一个较慢的磁盘上的表空间,而将表的索引存在于一个快速的磁盘上的表空间。但我们再查看表所属的模式还是没变的,它依然属于指定的模式,所以这并不违反常理。

Oracle

  • schema

    在Oracle数据库中不能新建一个schema,要想创建一个schema,只能通过创建一个用户的方法解决,在创建一个用户的同时为这个用户创建一个与用户名同名的schem并作为该用户的缺省shcema。即schema的个数同user的个数相同,而且schema名字同user名字一一对应并且相同

  • 获取方式

    oracle默认只有一个库(通过其他的高级组件支持多个库,可以不考虑), 创建用户就等同于创建schema,但是一个用户可以授权访问其他的schema

  • 注意事项

    oracle的访问必须通过sid或者tname或者serviceName,这个必须通过配置来完成。不用考虑所有database,但是为了方便支持所有的用户或者说是schema,还是需要支持schema的模式。

SqlServer

  • 获取方式

    sqlServer是最灵活的,一个实例可以有多个database,一个database可以有多个schema

其他

  • 集成数据库

    tdata、tdsql、tbase和tdata是个数据库一体机,类似于以前oracle配套买硬件的那种东西,并不是数据库技术。支持依赖于底层的数据库

    tdsql和tbase是分布式数据库。

  • 国产数据库

    国产数据库都是从pg和oracle、mysql衍生出来的

技术分析

获取数据库(database)

  • 手工配置所有数据库

  • 配置主机信息程序遍历所有数据库

    注意事项

    1. Oracle需要知道sid或tname或servicename才能下一步操作
    格式一: Oracle JDBC Thin using an SID: jdbc:oracle:thin:@host:port:SID Example: jdbc:oracle:thin:@localhost:1521:orcl格式二: Oracle JDBC Thin using a ServiceName: jdbc:oracle:thin:@//host:port/service_name Example:jdbc:oracle:thin:@//localhost:1521/orcl.city.com格式三:Oracle JDBC Thin using a TNSName: jdbc:oracle:thin:@TNSName Example: jdbc:oracle:thin:@TNS_ALIAS_NAME

获取约束(schema)

  • 注意事项

    针对多用户,多schema的,建议给一个赋予所有的schema查询权限的用户,然后交给程序去遍历。

获取表(table)

  • MySQL系列

    采用表名方式:database.tableName

  • Oracle/PostgreSQL系列

    采用表名方式:schema.tableName

  • SqlServer系列

    采用表名方式:database.schema.tablename

相关概念

表空间(tableSpace)

  • 概念

    表空间是实际的数据存储的地方。一个数据库schema可能存在于多个表空间,相似地,一个表空间也可以为多个schema服务。

  • 作用

    通过使用表空间,管理员可以控制磁盘的布局。表空间的最常用的作用是优化性能,例如,一个最常用的索引可以建立在非常快的硬盘上,而不太常用的表可以建立在便宜的硬盘上,比如用来存储用于进行归档文件的表。

参考链接

  • PostgreSQL 自增列

  • 探讨PostgreSQL实例中数据库之间的关系

  • PostgreSQL: 如何查询表和索引的表空间

  • PostgreSQL表空间、数据库、模式、表、用户/角色之间的关系

  • 理解PostgreSQL数据库、模式、表、空间、用户间的关系

  • PostgreSQL 方言数据库的信息架构

  • SQL Server、Oracle 和 PostgreSQL 之间的关系数据库比较

数据库学习之多种数据库横向对比相关推荐

  1. mysql选定数据库_mysql数据库学习――2,数据库的选定,创建,删除和变更_MySQL...

    bitsCN.com mysql数据库学习--2,数据库的选定,创建,删除和变更 数据库选定,数据库选定后依然可以使用其他数据库中的数据表,只要指定[数据库.数据表]即可 use db_namesel ...

  2. 数据库学习 (一):数据库系统概述

    数据库系统概述 数据:描述事物的符号 可以是数字.文字.图片.音频.视频等 数据库:大量数据的集合 长期存储在计算机中,可共享,有组织. 数据库具有数据结构化.最小的冗余度.较高的_独立性特点 数据库 ...

  3. 数据库学习篇之数据库大字段的理解

    前言 Oracle数据库大字段问题 问题描述:字段内容长度超4000 项目中存在用某些字段存预处理sql语句,最初,项目此类型字段用varchar2(4000),但随着项目跟进到二期,牵连的表越来越多 ...

  4. 数据库同步软件-多种数据库主从复制

    下载网站:www.SyncNavigator.CN  客服QQ1793040 ---------------------------------------------------------- 关于 ...

  5. sqlserver数据库学习之创建数据库关系图

    在学习SQLserver的过程中,当我们需要写一些系统有关数据库的数据结构说明文档的时候,我们常常会用到一些表的数据库关系图,利用SQLserver本身的创建数据库关系图的功能就可以很好的画出来. 建 ...

  6. java+oracle数据库锁,数据库学习之Oracle数据库\记录被另一个用户锁住\解决方法...

    1.先来看看为什么会出锁住: 数据库是一个多用户使用的共享资源.当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况.若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数 ...

  7. 数据库学习--DDL(数据库定义语言)

    数据库 创建数据库 create database if not exists 库名: 说明:if not exists的存在为了保证数据库是唯一的,同时保证程序不阻塞 删除数据库 drop data ...

  8. 数据库学习--DCL(数据库控制语言)

    DCL 在默认情况下,只有超级管理员才能操作数据库 访问控制权限 mysql实现了复杂的访问控制和权限系统,允许 命令行链接方式 mysql -u 用户名 -p密码 -h 服务器IP地址 -P 服务器 ...

  9. Flask数据库学习

    数据库学习 @(Flask) 关系型数据库(SQL数据库) 文档数据库和键值对数据库 (NoSQL) SQL数据库 表是关键.用表可以模拟程序中不同的实体. 主键:各行的唯一标识符. 外键:引用同一个 ...

最新文章

  1. 深度学习笔记6:Learning color features with Sparse Autoencoders
  2. 转:Unity3D研究院之提取游戏资源的三个工具支持Unity5(八十四)
  3. MySql中 delimiter 详解
  4. 五年级下册电子计算机与多媒体,语文人教版五年级下册《电子计算机与多媒体》.doc...
  5. linux的trace文件路径,linux系统分析工具之Blktrace(十)
  6. 计算机专业英语作业1,计算机专业英语作业1
  7. mysql中常见的几种索引
  8. 高性能javascript学习总结(2)--DOM编程
  9. 花了两天时间为我的引擎实现了性能分析的界面显示
  10. MySQL引擎详解(一)——引擎基本原理和操作
  11. OPNET14.5+WIN10+VS2010安装教程(附安装包)
  12. 顺网服务器ip修改工具,一键更换IP工具,修改IP地址 — 活动撸羊毛必备
  13. 微信小程序选项卡底线转换滑动动画
  14. 六祎-实现微信支付宝QQ钱包三块合一收款码
  15. 计算机夏令营英语面试,2016北航计算机夏令营的经验
  16. android屏蔽返回键和Home键
  17. ### Cause: java.sql.SQLSyntaxErrorException: ORA-01722: 无效数字
  18. 如何让一个div跟随鼠标移动
  19. 什么是单点登录?怎么样实现单点登录
  20. 查询出每个分组中的 top n 条记录

热门文章

  1. java list map 去重复_Java中List集合去除重复数据的六种方法
  2. 程序员成长的10条体会
  3. spaCy文本分类教程
  4. Premature end of Content-Length delimited message body 报错原因
  5. eclipse jdt
  6. 解决Could not get a resource from the pool 异常问题
  7. ctrypto-js中,DES解密的iv向量处理
  8. 4G/5G远程网络遥控,图传系统-无人车-无人船-无人机械制作方法
  9. 正则表达式在JS中的应用,判断邮箱是否合法
  10. 很多时候,你不得不被生活的种种琐事所牵绊