评论

收藏

[MySQL] MySQL和DB2建表SQL差异

数据库 数据库 发布于:2021-07-05 10:11 | 阅读数:245 | 评论:0

  作者:熔  岩
日期:2007-03-20
MSN :leizhimin@126.com
声明:原创作品,未经授权,谢绝转载!
  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。

  
关注下面的标签,发现更多相似文章