MySQL和Oracle的区别

语言的分类:                                                                                                                  

MySQL中语言的分类:数据定义语言(DDL):drop,create,alter等语句

                   数据操作语言(DML):insert,update,delete

                   数据查询语言(DQL):select等语句

                   数据控制语言(DCL):grant,revoke,commit,rollback等语句

Oracl中的语言的分类:数据定义语言(DDL):drop,create,alter等语句

                     数据操作语言(DML):insert,delete,update,select ... for update等语句

                     数据查询语言(DQL):基本查询语句,及order by子句,grop by 子句

                     数据控制语言(DCL):grant,revoke

                     事务控制语言(TCL):commit,savepoint,rollback

登陆不同:                                                                                                                    

            MySQL是以库的形式,每次操作是创建数据库:create datebase 数据库名

            Oracle是以用户的形式,每次操作是创建用户:create user 用户名

            并且Oracle中用select * from dba_user来查询所有用户

            而MySQL中用show database 来显示所有的数据库信息

创建数据库                                                                                                                   
在MySQL:create table 表名(

         列名 数据类型 [列级别约束 ] [默认值],

         ...

         列名  数据类型[列级别的约束][默认值],

         [表级别的约束 ]);

注意:像主键或者外键的设置等都是属于表级别的约束

      像列的值不能大于到少这就属于是列级别的约束,表级别约束可以写在这,执行也不会出错,但有些设置不成功,类似外键的设置

     例子:create table cource(sno int reference student(sno) )--这种是设置不成功的

      应该这样设置:在所有列定义完之后使用,constraint 约束名 foreign key 字段名 reference 表名(字段名)

           但主键是可以设置成功的。

在Oracle中:create table 表名(

           列名 数据类型,

           ...

           列名 数据类型);--oracle中是不区分标记属性和列级属性的

自动增长                                                                                                                     

在MySQL中使用auto_increment自动增长序列默认从1开始,步长为1使用auto_increment=10可以改变自动增长的初始值

在orcle中使用创建序列的方式来实现

 修改字段                                                                                                                    

在两者均使用中modify来修该字段的属性:alter table 表名 modify 字段名  数据类型

在MySQL中修改字段名是:alter table  表名 change 旧字段名  新字段名 新数据类型

在orcle中修改字段是:alter table 表名 rename column 旧字段名 to 新字段名

添加字段                                                                                                                    

在MySQL中添加字段是:alter table 表名 add 新字段名  数据类型 

                    [约束条件]  [first|after  已存在的字段]

  --其中first或者after 已存在的字段是表示可以再指定的位置添加字段

同时在MySQL中还可以通过 alter table 表名 modify  字段1 数据类型 first|after 字段2

在oracle中添加字段是:alter table 表名 add 新字段 数据类型 [约束条件]

删除字段                                                                                                                    

在MySQL中删除字段是:alter table 表名 Drop 字段名

在orcle中删除字段是:alter table 表名 drop column 字段名

删除表的外键约束                                                                                                            

在MySQL中:alter table  表名 drop foreign key 外键约束名

在orcle中:alter table 表名 drop constraint 外键约束名  

注意:如果没有没有给外键约束命名那就通过查找系统的user_constraints表找到系统给其的默认外键约束名然后删除

删除表                                                                                                                      

在MySQL中:drop table [if exists] 表名     --若是没有关联的一些表,表名可以一次性写上中间用','隔开

在Oracle中:drop table 表名

数据类型                                                                                                                    

整数类型:

在MySQL中:

类型名称 说明 存储要求
tinyint 很小的整数 1个字节
smalint 小整数 2个字节
mediuint 中等大小的整数 3个字节
int 普通大小的整数 4个字节
bigint 大整数 8个字节

 

 

 

 

 

 在orcle中只有整数类型

字符串类型:

在MySQL中:

类型名称 说明 存储要求
char(m) 固定长度二进制 m个字节
varchar(m) 变长的二进制 L+1个字节在此L<=M
tinytext 非常小的二进制 L+1个字节在此L<2^8
text 小的二进制字符串 L+2个字节在此L<2^16
mediutext 中等的二进制字符串

L+3个字节在此L<2^24

longtext 大的二进制 L+4个字节在此L<2^32
enum 枚举类型只能有一个枚举字符串 1或者2个字节取决于枚举的数目
set 一个设置,字符串对象可以有多个或者零个set成员 1,2,3,4或者8个字节,取决于集合成员的数量

 

 

 

 

 

 

 

 

 

 

在orcle中有:char  varchr2 nchar nvarchar2

运算符                                                                                                                      

算术运算符:

在MySQL中有:=  -  *  /   %     其中在oracle中是没有%求余的,在orcle中求余用的是mod()函数

注意在MySQL中可以直接使用=或者:=复制而在oracle中只能使用:=来赋值

比较运算符:

在MySQL中有:>   <  >=  <=  !=  <>  <=> in    between.. and     is null is not null   greatest      least    like   regexp

在orcle中是没有<=>安全等于运算符,安全等于运算符是用来判断null值的,当两个操作数均为null是返回是1,当只有一个是null是返回值为0而不为null

逻辑运算符:

在MySQL中有:not(!)     and(&&)    or(||)      xor

在orcle中and是不可以用&&来代替的,or是不可以用||来代替因为在orcle中||表示字符串拼接符,另外在orcle中没有xor逻辑异或的

位操作运算符

在MySQL中有:位与(&) 位或(|)  位非(~) 位异或(^) 左移(<<) 右移(>>) 六种

补充:在MySQL中的比较运算符中regexp的使用:

regexp在使用时常用一下几种通配符:'^'表示以该字符后面字符开头的的字符串例如:select * from student where sname regexp '^刘'

                                 '$'表示以该字符后面字符结尾的字符串例如:select * from student where sanme regexp '$刘'

                                 '.'匹配任一一个单字符select * from student where sname regexp '刘.玲'--匹配名字中包含刘和玲

                                                                                                    且中间只有一个字符的记录

                                 '[...]'匹配方框内的任何字符例如[abc] [0-9] [a-z]

                                 '*'匹配零个或者多个在它前面的字符而'.*'匹配任何数量的任何字符

                                 '[^字符集合]'匹配不在指定字符结合的

在MySQL中正则的使用:                                                                                                        

select * from student where name regexp '[a]+'   --匹配出现字母a多次

                                        '[:digit:]{2}'  --匹配两个数字连在一起

                                        '[:alpha:]{3}'  --匹配3个字母连在一起

                                        '[:space:]{3}'  --匹配3个空格

                                        '[:lower:]{3}'  --匹配3个小写字母与一起

                                        '[:alnum:]{3}'  --匹配3个字母一起

表中数据的查询                                                                                                              

(1)在MySQL中:使用group by 进行分组之后可以再后面再加上with rollup用来统计数量

           例如:select scode,count(*) from student group by scode with rollup;返回结果如下:

                                                                                           

但是在orcle中是不可以用with rollup的

(2)分页查询:

在MySQL中可以使用:select * from student limit 2,3;   --表示从第三行开始长度为三即2表示过2,3表示长度

注意:同时使用limit和order by 时limit必须为于后面

在orcle中使用rownum才可以实现分页查询:select * from(

                                             select rownum m,empno,ename job from emp

                                                      where rownum<7

                                                     )where m>3;

向表中插入数据                                                                                                                

在MySQL中:与orcle最大的不同是MySQL中可以一下插入多行数据,insert into 表名 values(值1),(值2)...(值n);

其它两种方法和orcle中一样。(通过查询出已知表的数据插入和通过创建一个表后从已知表中插入)

删除表中的数据                                                                                                                

在MySQL中:delete from 表名  [where 条件]

在orcle中删除可以有from也可以没有from

存储过程的创建及使用:                                                                                                        

在MySQL中:

创建存储过程为: 

delimiter //  --注意delimiter和//之间有空格,这句话的作用将MySQL的结束符设置成'//',为了避免与默认的sal语句结束符';'相冲突,

  create procedure 存储过程名字([参数  参数的数据类型])--注意不要忘了'()',参数列表可以没有参数类型有三种in|out|inout

    declare 变量名 变量的数据类型   [默认值]  --用来定义变量

      begin

         sql代码块;

      end //--之间有空格,这是存储过程的结束

delimiter; --恢复MySQL中默认的结束符';',当然delimiter也可以指定其他符号做结束符

注意:在MySQL中变量的使用是:set 变量名=相应的变量的值;  --这种方法在orcle中是不可以使用的

                     或者通过select...into 的方法赋值

例子:delimiter //

        create procedure my()

         begin

           select * from students;

         end //

      delimter;

存储过程的调用:                                                                                                            

在MySQL中:call 存储过程名([参数列表])

在orcle中:exec 存储过程名([参数列表])

       或者是:begin

                 存储过程名();

               end;

流程控制                                                                                                                    

在MySQL中:

(1)if语句:  if 条件  then 条件为真时要处理的事务

               [elseif  条件  then  条件为真时要处理的事务]  --注意在orcle中此处为:[elsif 条件 then  条件为真时要处理的事务]

               [else  要处理的事务]

               end if;

(2)loop语句:[loop_lable:]loop                  

                  要执行的sql代码

               end loop[loop_lable];

 例子:delclare id int default 0;

        add_loop:loop            --此处orcle中是:loop

          set id=id+1;

          if id>=10 then leave add_loop;     --此处orcle中没有leave,leave在此处的做用是退出循环

          end if;

       end loop add_loop;       --此处orcle中为end loop;

leave语句:leave lable;用来退出任何被标注的流程控制构造

leave和循环或者begin  end一起使用

iterate语句:iterate  lable;用来将执行顺序转到语句段开头处即在此循环

iterate只可以出现在loop,repeat,while语句内

(3)repeat语句:[repeat_lable]repeat         

                    sql语句

                 until  条件

                 end repeat;

在orcle中没有repeat带条件的循环。

例子:declare id int default 0;

       repeat

          set id=id+1;

         until id>10;

     end repeat;

posted @ 2015-09-21 20:53  夏天的薰衣草  阅读(2881)  评论(0编辑  收藏  举报