MYSQL与ORACLE SQLSERVER DB2的区别

下面,我们来看一下mysql中的一些细节问题,比如alter(修改)和drop(删除),oracle/sql server /db2/ANSI comparison,style,bugs,featere requests,resources等。
    首先看ALTER AND DROP
mysql> show procedure status where db=’db1′//
    显示所有的存储过程,太多,这里就不列出来了,发现p20过程有一个说明,下面更改一下p20的comment说明,那么我们可以这样:
mysql> alter procedure p20 comment ‘modify comment’//
Query OK, 0 rows affected (0.00 sec)

mysql> show procedure status where name=’p20′//
+—–+——+———–+—————-+———————+———————+—————+—————-+
| Db  | Name | Type      | Definer        | Modified            | Created             | Security_type | Comment        |
+—–+——+———–+—————-+———————+———————+—————+—————-+
| db1 | p20  | PROCEDURE | root@localhost | 2010-06-29 17:02:14 | 2010-06-25 10:29:01 | DEFINER       | modify comment |
+—–+——+———–+—————-+———————+———————+—————+—————-+
1 row in set (0.00 sec)

    通过alter更改了p20以前的comment,现在p20的alter是“modify comment”了。
    使用drop可以删除procedure,比如:
mysql> drop procedure p20//
Query OK, 0 rows affected (0.00 sec)

mysql> show procedure status where name=’p20′//
Empty set (0.00 sec)
    过程p20已经删除了,所以没有显示了,呵呵

  2、Oracle Comparison  与Oracle的比较                               
     1、Oracle允许在打开后再声明。MySQL必须在开始的时候声明。 
    2、 Oracle允许”CURSOR cursorname IS”这样的声明。 MySQL必须使用”DECLARE cursorname CURSOR”声明。
    3、Oracle不强制需要’()’。MySQL必须有’()’。
   4、 Oracle允许在函数中访问表元素。MySQL不允许在函数中访问表元素。
    5、Oracle支持”packages”。MySQL不支持”packages”。            
     6、这些是oracle和mysql的一些区别。
     在数据迁移时,oracle和mysql也有写不同,比如:
    在Oracle存储过程中         
    CREATE PROCEDURE … RETURN; …          
    在MySQL存储过程中
    CREATE PROCEDURE () label_at_start: BEGIN … LEAVE label_at_start; END  
    上面是oracle和mysql存储过程的不同,可以看出oracle的return,在mysql中使用LEAVE label_at_start,对于label_at_start,是最初为存储过程设定的标记。在oracle中使用的a:=b,在mysql中则使用“set a=b”。          
    7、 Side-By-Side  平行比较                  
 Oracle                                               MySQL           
CREATE PROCEDURE            CREATE PROCEDURE           
sp_name                                     sp_name           
AS                                                  BEGIN           
variable1 INTEGER               DECLARE variable1 INTEGER;           
variable1 := 55                        SET variable1 = 55;           
END                                              END             

     3、mysql与SQL Server的对比
    3.1摘要:           
    SQL Server参数名字必须以‘@’开头。           
    MySQL参数名是常规标识符。           

    SQL Server可以同时进行多个声明,如:”DECLARE v1 [data type], v2 [data type]“;
    MySQL只允许每次声明一个,如:”DECLARE v1 [data type]; DECLARE v2 [data type]“。           

    SQL Server存储过程体中没有BEGIN … END;       
    MySQL必须有BEGIN … END语句。           

   SQL Server不需要以’;'号结束语句;
    MySQL必须使用’;'号作为语句结束标志,除了最后一条语句外。         

   SQL Server可以进行”SET NOCOUNT”设置和”IF @@ROWCOUNT”判断;
   MySQL没有这些,但可以使用FOUND_ROWS()进行判断。

    SQL Server中使用”WHILE … BEGIN”语句;
    MySQL使用”WHILE … DO”语句。

    SQL Server允许使用”SELECT”进行指派;
    MySQL只允许SET进行指派。           
 
    SQL Server允许在函数中访问表;
    MySQL不允许在函数中访问表。
    Microsoft SQL Server的区别特别多,所以讲Microsoft或Sybase的程序转换成MySQL程序将会是个冗长的过程,而且区别都是在语法定义上的,所以转换需要更多特别的技巧。

     3.2 Some migration tips …  一些迁移技巧
     如果SQL Server中有名为@xxx的变量,你必须将其转换,因为@在MySQL中并不代表过程变量,而是全局变量,不要仅仅改成xxx,那样会使其含义不明确。因为在数据库的某个表中可能有一列的列名叫xxx,所以最好把@前缀改成自定义字符,如将@xxx改成var_xxx 。            

    3.3Side by Side 平行对比
    SQL Server                                               MySQL            
CREATE PROCEDURE                             CREATE PROCEDURE            
sp_procedure1                                          sp_procedure1            
AS                                                                   ()            
DECLARE @x VARCHAR(100)          BEGIN            
EXECUTE   sp_procedure2 @x          DECLARE v__x VARCHAR(100);            
DECLARE c CURSOR FOR                     CALL sp_procedure2(v__x);            
DECLARE c CURSOR FOR                     SELECT * FROM t;            
SELECT * FROM t                                     END            
END            

    4、mysql与DB2 的对比
    DB2允许PATH(路径)语句;
    MySQL不允许PATH(路径)语句。            

    DB2允许SIGNAL(信令)语句;
    MySQL不允许SIGNAL(信令)语句。            

    DB2允许例程名的重载;
    MySQL不允许对例程名的重载。            

    DB2有”label_x: … GOTO label_x”语法;
    MySQL有非正式的”label label_x; … GOTO label_x”语法。            

    DB2允许函数访问表;
    MySQL不允许函数访问表。            
    DB2存储过程基本和MySQL一致,唯一的不同是MySQL还没有引进DB2的一些语句,还有就是DB2允许重载,因此DB2可以有两个名字一样的例程,通过例程的参数或返回类型来决定执行哪个,所以DB2存储过程可以向下与MySQL的兼容。            

    4.2迁移技巧
    MySQL缺少SIGNAL语句,我们会在其他地方讨论临时工作区的问题。而对DB2的GOTO语句,我们直接用MySQL的GOTO代替就可以了。PATH(确定DBMS寻找例程的数据库目录)问题只需要在例程名前加上前缀就可以避免了。关于函数访问表的问题,建议大家用OUT参数的存储过程来代替就行了。            
    4.3mysql与db2的平行对比
DB2                                                   MySQL            
CREATE PROCEDURE                CREATE PROCEDURE            
sp_name                                         sp_name            
(parameter1 INTEGER)             (parameter1 INTEGER)            
LANGUAGE SQL                           LANGUAGE SQL            
BEGIN                                              BEGIN             
DECLARE v INTEGER;              DECLARE v INTEGER;             
IF parameter1 >=5 THEN       IF parameter1 >=5 THEN               
CALL p26();                                   CALL p26();               
SET v = 2;                                       SET v = 2;             
END IF;                                            END IF;             
INSERT INTO t VALUES (v);  INSERT INTO t VALUES (v);            
END  @                                           END  // 

     5、mysql与SQL标准的比较
    摘要:           
    Standard SQL requires:  标准SQL的要求,与DB2中的一样
    MySQL的目标是支持以下两个标准SQL特性:
    Feature P001 “Stored Modules” (特性 P001 “存储模式”)           
    Feature P002 “Computational completeness” (特性 P002 “计算完整性”)           

     DB2和MySQL相似的原因是两者都支持标准SQL中的存储过程。因此MySQL和DB2的区别就像mysql背离ANSI/ISO标准语法那样。但是mysql比Oracle或SQL Server更标准。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值