加入收藏 | 设为首页 | 会员中心 | 我要投稿 威海站长网 (https://www.0631zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

Oracle与MySQL的SQL语句区别

发布时间:2021-03-17 13:24:08 所属栏目:站长百科 来源:网络整理
导读:1数据库 /* ? mysql可以创建数据库,而oracle没有这个操作,oracle只能创建实例; ? sql数据库操作:database ? 格式: ? ? * create database 数据库名; ? ? * create database 数据库名 character set 字符集; */ CREATE DATABASE j0815_1;? CREATE DATABAS
编号 ORACLE MYSQL 注释 1 NUMBER int / DECIMAL DECIMAL就是NUMBER(10,2)这样的结构INT就是是NUMBER(10),表示整型;
MYSQL有很多类int型,tinyint mediumint bigint等,不同的int宽度不一样 2 Varchar2(n) varchar(n) ? 3 Date DATATIME 日期字段的处理
MYSQL日期字段分DATE和TIME两种,ORACLE日期字段只有DATE,包含年月日时分秒信息,用当前数据库的系统时间为?SYSDATE,?精确到秒,或者用字符串转换成日期型函数TO_DATE(‘2001-08-01’,’YYYY-MM-DD’)年-月-日?24小时:分钟:秒的格式YYYY-MM-DD HH24:MI:SS TO_DATE()还有很多种日期格式,?可以参看ORACLE DOC.日期型字段转换成字符串函数TO_CHAR(‘2001-08-01’,’YYYY-MM-DD HH24:MI:SS’)

日期字段的数学运算公式有很大的不同。MYSQL找到离当前时间7天用DATE_FIELD_NAME?>?SUBDATE(NOW(),INTERVAL 7 DAY)ORACLE找到离当前时间7天用?DATE_FIELD_NAME?>SYSDATE - 7;

MYSQL中插入当前时间的几个函数是:NOW()函数以`‘YYYY-MM-DD HH:MM:SS‘返回当前的日期时间,可以直接存到DATETIME字段中。CURDATE()以’YYYY-MM-DD’的格式返回今天的日期,可以直接存到DATE字段中。CURTIME()以’HH:MM:SS’的格式返回当前的时间,可以直接存到TIME字段中。例:insert into tablename (fieldname) values (now())

而oracle中当前时间是sysdate 4 INTEGER int / INTEGER Mysql中INTEGER等价于int 5 EXCEPTION SQLEXCEPTION? 详见<<2009001-eService-O2MG.doc>>中2.5 Mysql异常处理 6 CONSTANT VARCHAR2(1) mysql中没有CONSTANT关键字 从ORACLE迁移到MYSQL,所有CONSTANT常量只能定义成变量 7 TYPE g_grp_cur IS REF CURSOR; 光标 : mysql中有替代方案 详见<<2009001-eService-O2MG.doc>>中2.2 光标处理 8 TYPE unpacklist_type IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER; 数组: mysql中借助临时表处理
或者直接写逻辑到相应的代码中,
直接对集合中每个值进行相应的处理 详见<<2009001-eService-O2MG.doc>>中2.4 数组处理 9 自动增长的序列 自动增长的数据类型 MYSQL有自动增长的数据类型,插入记录时不用操作此字段,会自动获得数据值。ORACLE没有自动增长的数据类型,需要建立一个自动增长的序列号,插入记录时要把序列号的下一个值赋于此字段。 10 NULL NULL 空字符的处理
MYSQL的非空字段也有空的内容,ORACLE里定义了非空字段就不容许有空的内容。按MYSQL的NOT NULL来定义ORACLE表结构,?导数据的时候会产生错误。因此导数据时要对空字符进行判断,如果为NULL或空字符,需要把它改成一个空格的字符串。

?

(编辑:威海站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

副标题[/!--empirenews.page--]

1数据库

/*
? mysql可以创建数据库,而oracle没有这个操作,oracle只能创建实例;
? sql数据库操作:database
? 格式:
? ? * create database 数据库名;
? ? * create database 数据库名 character set 字符集;
*/
CREATE DATABASE j0815_1;?
CREATE DATABASE j0815_2 CHARACTER SET utf8;
-查看数据库
SHOW DATABASES;
-查看定义的数据库
SHOW CREATE DATABASE j0815_1;
-删除数据库
DROP DATABASE j0815_1;
-切换数据库
USE j0815_1;
-查看正在使用的数据库:
SELECT database();


2 表


2.1 创建表(异)


/*
? mysql:
? ? 1、mysql没有number、varchar2()类型;
? ? 2、mysql可以声明自增长:auto_increment;
? ? 3、mysql有double类型;
? oracle:
? ? 1、oracle没有double类型、有int类型但多数会用number来代替int;
? ? 2、oracle不可以声明自增长:auto_increment,主键自带自增长;
? ? 3、oracle小数只有float类型;
*/


--MySQL:
create TABLE emp(
? eno INT PRIMARY KEY AUTO_INCREMENT,
? ename VARCHAR(20) NOT NULL UNIQUE,
? job VARCHAR(10) DEFAULT ‘员工‘,
? mgr INT(10),
? hiredate ?DATE,
? comm DOUBLE?
);


--Oracle:
create table emp(
? empno number(10) primary key,--主键
? ename varchar2(20) not null unique,--不能为空,唯一
? job varchar2(10) default ‘匿名‘,--默认值,用单引号
? mgr number(10),
? hiredate date,--默认格式DD-MM-YY
? sal number(10,2),
? comm float,
? deptno number(10)
);


??


2.2 删除表(异)
/*
? ?MySQL:
? ? DROP TABLE IF EXISTS 表名;
? ? 或drop table if exists 表名;


? ?Oracle:


? ? drop table 表名;


? ?注:Oracle没有if exists关键字,也没用类似if exists的SQL语法。
*/


--MySQL:


DROP TABLE IF EXISTS emp;


drop table if exists emp;


?


--Oracle:


drop table emp




3 列


3.1 添加列(异)
/*
? MySQL:


? ? A. alter table 表名 add column 字段 数据类型;


? ? B. alter table 表名 add column 字段1 数据类型,add column 字段2 数据类型;


? ? 注:其中关键字column可有可无。




? Oracle:


? ? A. alter table 表名 add 字段 数据类型;


? ? B. alter table 表名 add (字段 数据类型);


? ? C. alter table 表名 add (字段1 数据类型,字段2 数据类型);?


? ? 注:对于A,只有添加单列的时候才可使用,对于添加多列时需要使用C,不能像MySQL那样重复使用add column关键字。
*/
--MySQL:
ALTER TABLE emp ADD COLUMN marriage VARCHAR(2);?
ALTER TABLE emp ADD marriagedate DATE;?
ALTER TABLE emp ADD COLUMN lovename VARCHAR(50),ADD COLUMN loveage INT;


--Oracle:
alter table emp add marriage varchar2(2);
alter table emp add (marriagedate DATE);
alter table emp add (lovename varchar2(50),loveage INT);


desc emp;


3.2 删除列(异)
/*
? MySQL:


? ? A. alter table 表名 drop column 字段;


? ? B. alter table 表名 drop column 字段,drop column 字段;


? ? 注:其中关键字column可有可无。


? ?


? Oracle:


? ? A. alter table 表名 drop column 字段;


? ? B. alter table 表名 drop (字段);


? ? C. alter table 表名 drop (字段1,字段2);


? ? 注:对于A,只有删除单列的时候才可使用,对于删除多列时需要使用C,不能像MySQL那样重复使用drop column关键字。
*/
--MySQL:
ALTER TABLE emp DROP COLUMN marriage;
ALTER TABLE emp DROP COLUMN marriagedate,DROP COLUMN lovename,DROP COLUMN loveage;


--Oracle:
alter table emp drop column marriage;
alter table emp drop (marriagedate);
alter table emp drop (lovename,loveage);


3.3 修改列名(异)
/*
? MySQL:


? ? alter table 表名 change column 原来字段 新的字段 字段类型(必须);




? Oracle:


? ? alter table 表名 rename column 原来字段 to 新的字段; ?注:不能有字段类型 ? ??
? ??
? ? 修改字段类型:alter table 表名 modify(字段 数据类型 约束条件);
*/


--MySQL:
ALTER TABLE emp CHANGE COLUMN mgr manager VARCHAR(20);


--Oracle:
alter table emp rename column mgr to manager;




3.4 修改列类型(说明)
/*
? Oracle中,在列有数据的时候,无法修改列类型;没有数据时可以。
? ? ? alter table 表名 modify(字段 数据类型 约束条件);


? MySQL中,无论列是否有数据都可以修改列类型。
? ? ? alter table 表名 modify column 字段名 类型;


? 但是当有数据时,直接修改列类型都可能对数据造成丢失等,所以一般需要结合具体的业务来对列数据做处理后,再修改列类型类型。所以修改列的类型并非使用SQL语句进行一步到位的修改,而是通过以下流程:


? ? A. 添加临时列


? ? B. 将需要更改的列的值经过类型转换的验证后,赋值给临时列


? ? C. 删除原有列


? ? D. 将临时列的列名修改为原有列列名
*/


--MySQL:
ALTER TABLE emp MODIFY COLUMN manager VARCHAR(20);


--Oracle:
alter table emp modify(manager varchar2(20));




4 索引


/*


在整个数据库内,MySQL的索引可以同名,也就是说MySQL的索引是表级别的;但是Oracle索引不可以同名,也就是说Oracle的索引是数据库级别的。


4.1 创建索引(同)


create index indexName on tableName (columnName);


4.2 删除索引(异)


MySQL:


alter table tableName drop index indexName


?


Oracle:


drop index indexName


4.3 查询表的索引(异)


MySQL:


show index from tableName


?


Oracle:


select index_name,table_name,column_name from user_ind_columns where table_name=‘ tableName ‘?
*/
?


5 空字符串问题
/*


Oracle中空字符串‘‘就是null(也就是说,只有null,没有空字符),而MySQL是区分null和‘‘的。


对于使用语句:select * from table1 where user_name <> ‘‘来查询列user_name不为空(不为null且不为空字符)时,Oracle会查不出任何结果,而MySQL可以正常运行。这里MySQL之所以可以得到正确结果,还因为比较符号<>会先将列为null的内容进行过滤,然后再比较内容是否为空字符串。


这就要求一方面,以后在编写代码的时候,尽量保证不会往数据库插入空字符串‘‘这样的值,要么保持有数据,要么保持为null。另外,对于MySQL中已经同时存在Null和‘‘时,所有判断是否为null或者‘‘的地方改为判断列的长度是否为0。
*/

?

MySQL与Oracle SQL语言差异比较

  • 数据类型
热点阅读