MySQL和Oracle的语法差异
一、数据类型差异
类别 | Oracle | MySQL | 区别 |
---|---|---|---|
日期 | Date | Date、Time、Datetime | MySQL中Date只表示年月日,Time只表示时分秒,Datetime表示年月日时分秒Oracle中Date表示年月日时分秒和MySQL中Datetime一样 |
自增列 | 序列 | AUTO_INCREMENT | MySQL通过在表上设置自增键实现自增,Oracle是通过序列实现自增建一个序列初始值最大值等 |
… | … | … | … |
二、数据库操作差异
类别 | Oracle | MySql | 区别 |
---|---|---|---|
参数查询 | show parameter 参数 | show variables like ‘%参数%’ | |
数据库 | 无 | create database test_1;show databases; | MySQL可以创建数据库,Oracle只是创建实例,用户在实例里面,或者容器数据库 |
… | … | … | … |
三、表操作差异
类别 | Oracle | MySQL | 区别 |
---|---|---|---|
创建表 | create table emp{ emp_no number(10) primary key, --主键…} | create table emp01{emp_no int(10) primary key AUTO_INCREMENT,–主键自增…} | MySQL没有number,但是可以声名自增长(AUTO_INCREMENT),MySQL有double类型。Oracle不能声明自增长,小数只有float类型 |
删除表 | drop 表名 | drop table if exists 表明 | Oracle中没有exists关键字,如果想实现可以通过判断有没有来达到同样的效果 |
添加列 | alter table emp add name varchar2(10);alter table emp add(name varchar2(10),password varchar2(30)) | alter table emp add column name varchar(10);alter table emp add column name varchar(10),add column password varchar(30) | MySQL添加字段需要add column+想要添加的字段名以及类型,如果想添加多个字段每个字段前都需要add column。Oracle添加字段不需要column,添加多个字段时只需要在同一个括号中 |
删除列 | 同上,把add换成了drop | 同上,把add换成了drop | 同上,把添加换成了删除,add换成了drop |
修改列名 | alter table emp rename column name to username | alter table emp change column name username varchar(10) | MySQL通过change column 原来字段 要改成的字段 必须加上字符类型。Oracle通过rename column 原来字段 to 新的字段 不能有字段类型,字段类型需要alter table 表名 modify (字段 数据类型 约束条件) |
修改列类型 | alter table emp modify (name varchar2(30)) | alter table emp modify column name varchar(30) | Oracle列有数据时无法修改没有时可以修改。MySQL什么时候都可以修改,但是有数据时可能会造成数据丢失,可以添加临时列,把数据导入到临时列之后删除原有列,并把临时列名更改为原有列名 |
索引 | 创建索引区别不大,删除索引时可以直接drop index indexName,查询索引通过视图查询 | 删除索引需要指定表名,drop index indexName on tableName,alter table tableName drop index indexName,直接show index from tableName就可以查到索引 | MySQL索引可以重名所以删除时需要指定表名,因此索引是表级别的,Oracle中索引不可以重名,是数据库级别的 |
空字符串 | ‘’就是null | ''和null是有区别的 | Oracle中’‘和null是没有区别的,但是在MySQL中’‘是代表有空字符的,null是什么都没有’真空’,尽量别像数据库中插入’’ |
分区表 | 可以实现自动分区 | 无自动分区 | MySQL想实现自动分区需要存储过程实现 |
四、权限差异
类别 | Oracle | MySQL | 区别 |
---|---|---|---|
创建用户 | 在create user时就需要确定权限 | 直接create user user_name identified by user_password | Oracle只需要两个connect,resource权限给用户,用户就可以进行数据操作了,但是不能跨用户。Mysql中需要对权限单独赋予,也可以全部赋予,不同用户可以共享一些表,Oracle在访问时需要加上另一个用户的标识 |
删除用户 | drop user user_name cascade | drop user user_name | cascade全部删除 |
… | … | … | … |
五、函数差异
类别 | Oracle | MySQL | 区别 |
---|---|---|---|
字符串函数 | insert(‘qwer’,‘asdf’,2) | insert(‘qwer’,‘asdf’) | Oracle可以指定插入位置,从2开始插入。MySQL从默认位置插入 |
substr(‘asdf’,2,2) | substring(‘asdf’,2,2) | 只是函数名称不同,其他的用法是一样的 | |
length() | char_length() | Oracle中select length(‘asdf’) value from dual。MySQL中select char_length(‘asdf’) value | |
控制流函数 | nvl(u.email_address,10) | ifnull(u.email_address,10)或者isnull(u.email_address) | Oracle中如果email是空用10替换,MySQL中如果是空不替换只是显示为10,没有数字的如果为空就显示为1,不为空显示为0 |
… | … | … | … |
未完。