MySQL和DB2建表SQL差异

  1. 云栖社区>
  2. 博客>
  3. 正文

MySQL和DB2建表SQL差异

技术小阿哥 2017-11-27 13:44:00 浏览628 评论0

摘要: MySQL5和DB2 V9建表SQL差异     背景:           MySQL5和DB2在创建表的时候有些差异,在实际工作中,我常常将一些DB2的表导入到MySQL5中,然后用SQLyog Enterprise Edition V5.25来开发数据库脚本,用PL/SQL Developer V7.01格式化SQL代码,然后用Quest Central for DB2 V4.9.0 build 16工具执行调试,如果开发存储过程,我会转入DB2 Developer Workbench 来做。

MySQL5和DB2 V9建表SQL差异
 
 
背景:
 
        MySQL5和DB2在创建表的时候有些差异,在实际工作中,我常常将一些DB2的表导入到MySQL5中,然后用SQLyog Enterprise Edition V5.25来开发数据库脚本,用PL/SQL Developer V7.01格式化SQL代码,然后用Quest Central for DB2 V4.9.0 build 16工具执行调试,如果开发存储过程,我会转入DB2 Developer Workbench 来做。这样做的目的是可以大大提高开发效率。
 
环境:
Windows XP Professional
MySQL-5.0.37
DB2 Enterprise V9.1
 
开发工具:
 
       下面是我在实际工作中根据自己的喜好选用的开发工具,都是Crack版本的,因为公司用的软件都是免费的,呵呵!下面是我在DB2开发过程中用的工具列表:
 
SQLyog Enterprise Edition V5.25:是一个很不错的MySQL客户端管理开发工具,特点是速度极快,缺点是中文支持不好。配合MySQL官方的GUI Tools就很完美了。这个也是商业软件,但也有免费的LE版本。
 
Quest Central for DB2 V4.9.0 build 16:是一个DB2的客户端工具,特点是速度很快,但是很全却都很一般,做SQL开发就像在记事本里写一样!不过也有一个普通开发者难以接受的价格,但是网上有众多的注册机,比买授权码还方便。
 
PL/SQL Developer V7.01:是Oracle 专用的客户端开发工具,它在所有数据库开发管理工具中都是当之无愧的No1,速度、功能、易用性各个方面都没有哪个工具能赶上!虽然它不能连DB2,但是它有SQL关键字高亮显示功能,还可以格式化SQL,相当的棒!因此,即使不用Oracle,我也装要装它!并且价格不菲,我等只能google个SN来用了,呵呵。
 
DB2 Developer Workbench (基于Eclipse 3.2):是一个基于Eclipse的DB2、Java开发工具,特点是开发存储过程方便,但是和记事本没什么两样,好的是可以随时运行存储过程。这个是免费的,可以才IBM官方网站上免费下载。
 
EditPlus V2.31:最好的文本编辑器,支持一些常见语言的高亮显示,速度极快,有强大的查找替换功能,一般我用来代替记事本,或做一些正则替换等用,经过配置后,可以作为简单的Java IDE来用。汉化破解版的很多。
 
问题:
 
       下面是我工作的中的一个小插曲,平时常常回这个干的:
假如有个DB2的建表SQL脚本,你要导入到MySQL中,你需要怎么做?如何处理两者SQL脚本的差异?下面就是个例子,给出了同一个表的两个数据库建表SQL,看完就知道了。
 
DB2建表脚本
DROP TABLE TMP_ZYGJ;
create table TMP_ZYGJ
(
  XH INTEGER not null generated by default as identity,
  GJ_DM CHAR(3) not null,
  GJ_MC VARCHAR(100) not null,
  GJ_JC VARCHAR(80) not null,
  XYBZ  CHAR(1) not null,
  primary key (XH)
);
 comment on table TMP_ZYGJ is '主要国家';
 comment on column TMP_ZYGJ.XH is '报表序号';
 comment on column TMP_ZYGJ.GJ_DM is '国家代码';
 comment on column TMP_ZYGJ.GJ_MC is '国家名称';
 comment on column TMP_ZYGJ.GJ_JC is '国家简称';
 comment on column TMP_ZYGJ.XYBZ is '选用标志';
 
MySQL5的建表脚本
create table TMP_ZYGJ
(
  XH bigint not null auto_increment comment '报表序号',
  GJ_DM CHAR(3) not null comment '国家代码',
  GJ_MC VARCHAR(100) not null comment '国家名称',
  GJ_JC VARCHAR(80) not null comment '国家简称',
  XYBZ  CHAR(1) not null comment '选用标志',
  primary key (XH)
)comment='主要国家';
 
        看了上面的脚本,差异不言而喻,如何给里面插入数据呢?其实插入数据的脚本是通用的,下面我给个片段出来:
 
insert into TMP_ZYGJ(GJ_DM, GJ_MC, GJ_JC, XYBZ) values ('004', '亚洲-阿富汗', '亚洲-阿富汗', 'Y'),
-- 亚洲
('344', '亚洲-中国(香港)', '亚洲-中国(香港)', 'Y'),
('446', '亚洲-中国(澳门)', '亚洲-中国(澳门)', 'Y'),
('158', '亚洲-中国(台湾)', '亚洲-中国(台湾)', 'Y'),
('392', '亚洲-日本', '亚洲-日本', 'Y'),
('410', '亚洲-韩国', '亚洲-韩国', 'Y'),
('702', '亚洲-新加坡', '亚洲-新加坡', 'Y'),
('458', '亚洲-马来西亚', '亚洲-马来西亚', 'Y'),
('360', '亚洲-印度尼西亚', '亚洲-印度尼西亚', 'Y'),
('764', '亚洲-泰国', '亚洲-泰国', 'Y'),
('376', '亚洲-以色列', '亚洲-以色列', 'Y'),
('608', '亚洲-菲律宾', '亚洲-菲律宾', 'Y'),
-- 欧洲
('250', '欧洲-法国', '欧洲-法国', 'Y'),
('724', '欧洲-西班牙', '欧洲-西班牙', 'Y'),
('756', '欧洲-瑞士', '欧洲-瑞士', 'Y'),
('752', '欧洲-瑞典', '欧洲-瑞典', 'Y'),
('909', '欧洲-俄罗斯', '欧洲-俄罗斯', 'Y'),
('804', '欧洲-乌克兰', '欧洲-乌克兰', 'Y'),
('826', '欧洲-英国', '欧洲-英国', 'Y'),
('380', '欧洲-意大利', '欧洲-意大利', 'Y'),
('040', '欧洲-奥地利', '欧洲-奥地利', 'Y'),
('056', '欧洲-比利时', '欧洲-比利时', 'Y'),
('528', '欧洲-荷兰', '欧洲-荷兰', 'Y'),
('578', '欧洲-挪威', '欧洲-挪威', 'Y'),
('208', '欧洲-丹麦', '欧洲-丹麦', 'Y'),
('278', '欧洲-德国', '欧洲-德国', 'Y'),
-- 北美洲
('840', '北美洲-美国', '北美洲-美国', 'Y'),
('124', '北美洲-加拿大', '北美洲-加拿大', 'Y'),

-- 拉丁美洲
('032', '拉丁美洲-阿根廷', '拉丁美洲-阿根廷', 'Y'),
('076', '拉丁美洲-巴西', '拉丁美洲-巴西', 'Y'),
('152', '拉丁美洲-智利', '拉丁美洲-智利', 'Y'),
('092', '拉丁美洲-英属维尔京群岛', '拉丁美洲-英属维尔京群岛', 'Y'),
('136', '拉丁美洲-开曼群岛', '拉丁美洲-开曼群岛', 'Y'),
-- 大洋洲
('036', '大洋洲-澳大利亚', '大洋洲-澳大利亚', 'Y'),
('016', '大洋洲-美属萨摩亚', '大洋洲-美属萨摩亚', 'Y'),
('554', '大洋洲-新西兰', '大洋洲-新西兰', 'Y'),
-- 非洲
('818', '非洲-埃及', '非洲-埃及', 'Y'),
('710', '非洲-南非', '非洲-南非', 'Y'),
('480', '非洲-毛里求斯', '非洲-毛里求斯', 'Y');
COMMIT;
 
 
        如果这样的需求很多,你可以考虑写程序来实现,一个一个手动处理就太慢了,这里我就不做介绍了。
 
        另外,只所以有这个需求,是因为MySQL可以方便从一个查询生成一个表,这个功能很使用,常用来导出数据和省而DB2不支持这么干。以上面的MySQL脚本创建的表为例,从一个查询生成一个新表:
 
create table ttt as 
select t.gj_dm, t.gj_mc
  from TMP_ZYGJ t
 where t.gj_mc like '%亚洲%'
   and t.gj_mc not like '%日本%';
 
        这样就生成了一个新表ttt。
 

本文转自 leizhimin 51CTO博客,原文链接:http://blog.51cto.com/lavasoft/20994,如需转载请自行联系原作者
【云栖快讯】一站式开发者服务,海量学习资源免费学  详情请点击

网友评论