手记

MySQL和DB2建表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。

 

 

 

 

 

 

 

附件:http://down.51cto.com/data/2347775

©著作权归作者所有:来自51CTO博客作者leizhimin的原创作品,如需转载,请与作者联系,否则将追究法律责任

DB2MysqlSQLMySQL


0人推荐
随时随地看视频
慕课网APP