oracle中mod和mysql_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;返回结果如下:

QUh5EaySJHFffYixicS4Wn4gko2LZKOYzDzV0KMve2PAC2gyHh71Gm0b40OMTSTGFfMDUS+UuoVN4tBGxhlCGFfNDwSdZBqV8YmDNGPnBwKizNh9twiizLh4jUDRqgUn3Uoz3neiLseYvhxj+nKM6et32dbLTpOEbvcAAAAASUVORK5CYII=

但是在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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值