• 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;

    有多大成功就承受过多大压力
  • 相关阅读:
    python报错: invalid syntax
    python报错:not supported between instances of 'str' and 'int'
    python类型检查和类型转换
    python的input()函数
    为什么双击打开py文件时窗口瞬间关闭了?
    python条件判断语句
    python运算符的优先级
    JDK1.8 新特性(全)
    mysql事务详解
    Java判断指定日期是否为工作日
  • 原文地址:https://www.cnblogs.com/lzlnd/p/4821939.html
Copyright © 2020-2023  润新知