MYSQL和ORACLE的一些区别:
有很多应用项目, 刚起步的时候用MYSQL数据库基本上能实现各种功能需求,随着应用用户的增多,数据量的增加,MYSQL渐渐地出现不堪重负的情况:连接很慢甚至宕机,于是就有把数据从MYSQL迁到ORACLE的需求,应用程序也要相应做一些修改。但oracle也比mysql严谨得多,总结出以下几点注意事项。Oracle数据库与MySQL数据库的区别是本文我们主要介绍的内容,希望能够对您有所帮助。
1、新增加列;oracle和mysql通用:alter table 表名 add (列名 数据类型(长度))
删除列oracle和mysql通用::alter table 表名 drop column 列名;,
而mysql可以比较随意,在通用的基础上,可以在add 和drop后可以有column,可以无,而oracle不能,只能按上面的通用格式写。
2、删除语句:oracle和mysql都可以用:"delete from 表名[where……]",但mysql不能用"delete 表名 [where……]”而oracle可以用"delete 表名 [where……]”
3改表名:oracle特有的:rename 表名a to 表名b;
mysql特有的:alter table 表名a to 表名b;
orcle和mysql通用的:alter table 表名a rename to 表名b;
1、Oracle 支持 Check 约束,MySQL Check 可以加上,但只是用来看的,并不起作用。
2、Oracle 可以执行匿名的代码段,例如:
set serveroutput on
SQL> BEGIN
dbms_output.put_line('Hello World');
END;
/
Hello World
MySQL 不能执行匿名的,必须创建存储过程。语法和oracle的存储过程类似
3、显示方面:
1显示所有用户(库):oracle:select * from all_users;
mysql> SHOW DATABASES;
2显示当前连接用户(库):oracle:show user;
mysql>connect;
3:改变连接的用户(库)oracle:conn 用户名/密码 @主机字符串
mysql> USE 库名; (按回车键出现Database changed 时说明操作成功!)
4:查看当前用户(库)中存在的所有表:
oracle> select * from tab;
mysql> SHOW TABLES;
5:显示表的结构:
oracle> desc 表名
mysql> DESCRIBE 表名; 或者用: show columns from 表名;
6、oracle有dual,mysql无dual,用作计算1+1显示结果时:
oracle> select 1+1 from dual;
mysql> select 1+1;
4:执行外部脚本:导入.sql文件命令(例如mysql.sql)
oracle> @mysql.sq
mysql>use database;
mysql>source mysql.sq
5、关于时间:
1、显示时间:oracle> Select sysdate from dual;
mysql使用日期函数> select sysdate();或者:select now();
或者获得当前日期:select curdate();select current_date()
或者获得当前时间:select curtime(); select current_time();
2、显示当前日期增加一个月后的时间:
oracle> select add_months(sysdate,1) from dual;
MySQL> select date_add(sysdate(),interval 1 month);
6、取字符串字串的函数:(以abcd从第2位开始截取长度为3的字符串)
oracle使用substrb():select substrb('abcd',12,3); from dual
mysql使用 substring():select substring('abcd',1,3);
或者使用mid:select mid('abcd',1,3);
7组函数用法规则
mysql中组函数在select语句中可以随意使用,但在oracle中如果查询语句中有组函数,那其他列名必须是组函数处理过的,或者是group by子句中的列否则报错
eg:select name,count(money) from user;这个放在mysql中没有问题在oracle中就有问题了。
8.自动增长的数据类型处理
MYSQL有自动增长的数据类型,插入记录时不用操作此字段,会自动获得数据值。
ORACLE没有自动增长的数据类型,需要建立一个自动增长的序列号,插入记录时要把序列号的下一个值赋于此字段。
CREATE SEQUENCE序列号的名称(最好是表名+序列号标记)INCREMENT BY 1 START WITH 1 MAXVALUE 99999 CYCLE NOCACHE;
其中最大的值按字段的长度来定,如果定义的自动增长的序列号NUMBER(6),最大值为999999
INSERT语句插入这个字段值为:序列号的名称.NEXTVAL
9.单引号的处理
MYSQL里可以用双引号包起字符串,ORACLE里只可以用单引号包起字符串。在插入和修改字符串前必须做单引号的替换:把所有出现的一个单引号替换成两个单引号。
10.翻页的SQL语句的处理
mysql:MYSQL: select * from table1 limit 5;
MYSQL处理翻页的SQL语句比较简单,用LIMIT开始位置,记录个数;PHP里还可以用SEEK定位到结果集的位置。ORACLE处理翻页的SQL语句就比较繁琐了。每个结果集只有一个ROWNUM字段标明它的位置,并且只能用ROWNUM<100,不能用ROWNUM>80。
以下是经过分析后较好的两种ORACLE翻页SQL语句(ID是唯一关键字的字段名):
语句一:
SELECT ID, [FIELD_NAME,...] FROM TABLE_NAME WHERE ID IN (
SELECT ID FROM (
SELECT ROWNUM AS NUMROW, ID
FROM TABLE_NAME WHERE 条件1 ORDER BY 条件2)
WHERE NUMROW > 80 AND NUMROW < 100 )
ORDER BY 条件3;
语句二:
SELECT * FROM (
( SELECT ROWNUM AS NUMROW, c.* from (
select [FIELD_NAME,...] FROM TABLE_NAME
WHERE 条件1 ORDER BY 条件2) c)
WHERE NUMROW > 80 AND NUMROW < 100 )
ORDER BY 条件3;
mySql:select * from 表名 limit startIndex,pageSize;
statIndex:记录的开始下标,从0开始。
pageSize:每页多少条记录。显示的记录数。
11.长字符串的处理
长字符串的处理ORACLE也有它特殊的地方。INSERT和UPDATE时最大可操作的字符串长度小于等于4000个单字节,如果要插入更长的字符串,请考虑字段用CLOB类型,方法借用ORACLE里自带的DBMS_LOB程序包。插入修改记录前一定要做进行非空和长度判断,不能为空的字段值和超出长度字段值都应该提出警告,返回上次操作。
12.日期字段的处理
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
13.空字符的处理
MYSQL的非空字段也有空的内容,ORACLE里定义了非空字段就不容许有空的内容。按MYSQL的NOT NULL来定义ORACLE表结构,导数据的时候会产生错误。因此导数据时要对空字符进行判断,如果为NULL或空字符,需要把它改成一个空格的字符串。
14.字符串的模糊比较
MYSQL里用字段名like%‘字符串%’,ORACLE里也可以用字段名like%‘字符串%’但这种方法不能使用索引,速度不快,用字符串比较函数instr(字段名,‘字符串’)>0会得到更精确的查找结果。
15.程序和函数里,操作数据库的工作完成后请注意结果集和指针的释放。
1. 命令行工具:
Oracle 的官方命令行工具是SQLPlus
MYSQL 的命令行工具是mysql:
2. 关于用户的概念:
1) 在 Oracle 中有一个用户的概念,用来登陆到数据库,比如openlab 用户。用户拥有一定的权限,可以创建表、
视图等。用户名下的数据表、视图等对象的集合叫做Schema。
数据库安装好后,建立的默认用户是:sys,system,scott。
创建用户:SQL>create user 用户名 identified by 密码; --(一般是DBA来创建,普通用户没有创建用户的
权限)
在 SQLPLus 工具中切换用户:SQL>conn 用户名/密码@主机字符串
查看当前用户:SQL>show user
显示所有的用户:SQL>select * from all_users;
显示用户下的表:SQL>select * from tab;
2) MYSQL 中对应于Oracle 中用户的概念是database。登陆后要先建立database,才能建表。默认创建的
database是mysql,
test:下面是一些比较常见语句的,故再重复列出一次:
----------------------------
创建数据库: mysql> create database 库名
切换用户:mysql>use database库名
查看当前用户:mysql > connect
显示所有数据库:mysql>show databases;
显示用户下的表:mysql>show tables
3. 假设有外部脚本文件C:\script.sql,执行外部脚本文件的方式:
1)Oracle:SQL>@ script.sql
2)MYSQL :mysql> source script.sql;
4. Sql 语句中的表达式:
1)Oracle:SQL>select 12 * 10 from dual;
2)MYSQL :mysql> select 12 * 10;
5. 取系统时间
1) Oracle:SQL> select sysdate from dual;
2) Mysql:
mysql> select now();
mysql> select sysdate();
mysql> select curdate();
mysql> select current_date;
mysql> select curtime();
mysql> select current_time;
6. 日期格式转换:
1) Oracle:
SQL> select to_char(sysdate,'yyyy-mm-dd') from dual;
SQL> select to_char(sysdate,'hh24-mi-ss') from dual;
2) Mysql
mysql> select date_format(now(),'%Y-%m-%d');
mysql> select time_format(now(),'%H-%i-%S');
7. 日期函数:6 个月以后
1) Oracle:
SQL> select add_months(sysdate,6) from dual;
2) Mysql:
mysql> select date_add(now(),interval 6 month);
8. 字符函数:从’helloworld’中截取hello
1) Oracle:SQL> select substr('helloworld',1,5) from dual;
结果是:hello
2) Mysql:
select substring('helloworld',1,5);
9. 修改表名:
1) Oracle:SQL> rename oldname to newname; --也可以用来修改各种对象名称
2) Mysql:
mysql>alter table oldname to newname;
10. 取前5条记录:
1) Oracle:SQL> select * from 表名 where rownum<6;
2) Mysql:
mysql> select * from 表名 limit 5;
11. 取第5条到第10 条记录,共6 条:
1) Oracle:SQL> select * from
(select id,name,rownum rn from 表名)
where rn between 5 and 10;
2) Mysql:mysql> select * from 表名 limit 5, 6; --从第5 条开始,取6 条。
12. 主键自增长:
1) Oracle:
使用序列实现,比如创建序列,起点是1000,步进是1:
SQL> Create sequence myseq start with 1000 increment by 1;
增加记录:
SQL> insert into student(id,name) values(myseq.nextval, 'peter');
2) Mysql:
在建表是指定主键自增长:
mysql> create table student(
id int auto_increment primary key,
name char(20));
增加记录:
mysql> insert into student(name) values('peter');
mysql> select * from student;
+----+-------+
| id | name |
+----+-------+
| 1 | peter |
+----+-------+
1 row in set (0.00 sec)
13. 关于组函数
select deptno, count(*) from emp;
这种语法,在MySQL中是正常的,而在Oracle中是会报错的,select列表中的deptno 列必须跟在group by短语
后:
select deptno, count(*) from emp group by deptno;
----------------------------------
以下是无意中在网络看到的使用MySql的管理心得,
在windows中MySql以服务形式存在,在使用前应确保此服务已经启动,未启动可用net start mysql命令启动。而Linux中启动时可用“/etc/rc.d/init.d/mysqld start”命令,注意启动者应具有管理员权限。
刚安装好的MySql包含一个含空密码的root帐户和一个匿名帐户,这是很大的安全隐患,对于一些重要的应用我们应将安全性尽可能提高,在这里应把匿名帐户删除、 root帐户设置密码,可用如下命令进行:
use mysql;
delete from User where User=”";
update User set Password=PASSWORD(’newpassword’) where User=’root’;
如果要对用户所用的登录终端进行限制,可以更新User表中相应用户的Host字段,在进行了以上更改后应重新启动数据库服务,此时登录时可用如下类似命令:
mysql -uroot -p;
mysql -uroot -pnewpassword;
mysql mydb -uroot -p;
mysql mydb -uroot -pnewpassword;
上面命令参数是常用参数的一部分,详细情况可参考文档。此处的mydb是要登录的数据库的名称。
在 进行开发和实际应用中,用户不应该只用root用户进行连接数据库,虽然使用root用户进行测试时很方便,但会给系统带来重大安全隐患,也不利于管理技 术的提高。我们给一个应用中使用的用户赋予最恰当的数据库权限。如一个只进行数据插入的用户不应赋予其删除数据的权限。MySql的用户管理是通过 User表来实现的,添加新用户常用的方法有两个,一是在User表插入相应的数据行,同时设置相应的权限;二是通过GRANT命令创建具有某种权限的用 户。其中GRANT的常用用法如下:
grant all on mydb.* to NewUserName@HostName identified by “password” ;
grant usage on *.* to NewUserName@HostName identified by “password”;
grant select,insert,update on mydb.* to NewUserName@HostName identified by “password”;
grant update,delete on mydb.TestTable to NewUserName@HostName identified by “password”;
若 要给此用户赋予他在相应对象上的权限的管理能力,可在GRANT后面添加WITH GRANT OPTION选项。而对于用插入User表添加的用户,Password字段应用PASSWORD 函数进行更新加密,以防不轨之人窃看密码。对于那些已经不用的用户应给予清除,权限过界的用户应及时回收权限,回收权限可以通过更新User表相应字段, 也可以使用REVOKE操作。
下面给出本人从其它资料(www.cn-java.com)获得的对常用权限的解释:
全局管理权限:
FILE: 在MySQL服务器上读写文件。
PROCESS: 显示或杀死属于其它用户的服务线程。
RELOAD: 重载访问控制表,刷新日志等。
SHUTDOWN: 关闭MySQL服务。
数据库/数据表/数据列权限:
ALTER: 修改已存在的数据表(例如增加/删除列)和索引。
CREATE: 建立新的数据库或数据表。
DELETE: 删除表的记录。
DROP: 删除数据表或数据库。
INDEX: 建立或删除索引。
INSERT: 增加表的记录。
SELECT: 显示/搜索表的记录。
UPDATE: 修改表中已存在的记录。
特别的权限:
ALL: 允许做任何事(和root一样)。
USAGE: 只允许登录–其它什么也不允许做。
相关推荐
使用DBMover可以灵活定义Mysql和Oracle之间表和字段的对照关系,也可以在DBMover创建一个查询,把查询结果当作源表转入到Oracle中。 Dbmover for Mysql to Oracle 可以定时,定周期自动运行。 支持 Oracle 8i 以后...
Convert Mysql to Oracle 最新版本:4.0 Convert Mysql to Oracle是一个免费的数据库转换工具,实现快速安全地将Mysql数据库导入为ORACLE数据库。 Convert Mysql to Oracle 功能特点 可以转换所有的Mysql字段类型 ...
mysql和oracle的区别,从备份方式、热备份、sql语句的扩展和灵活性等的方面回答
5. MySQL与ORACLE区别 19 6. 可视化工具 38 三、 ORACLE介绍 38 1. ORACLE是什么? 38 2. ORACLE核心特点是什么? 38 3. ORACLE数据库类型有哪些? 39 4. ORACLE整体架构及工作原理? 39 5. 可视化工具 40
mysql和Oracle的多数据源配置,springboot+mysql+oracle
支持MYSQL和ORACLE!!!
使用ORACLE和MYSQL的简单区别 归纳下我遇到最常见的问题。 1.在ORACLE中用select * from all_users显示所有的用户,而在MYSQL中显示所有数据库的命令是show databases。对于我的理解,ORACLE项目来说一个项目就应该...
数据库 Mysql转oracle sql脚本转oracle脚本
mysql和oracle和sql语句 mysql和oracle和sql语句
mysql和Oracle性能比较.pdf
MySQL to Oracle MySQL 转 Oracle亲自测试,好用
文档包含了Oracle数据库的连接,以及检测是否连接成功,还包含的MySQL数据库的连接及检测,这是基于初学者的学习使用
mysql数据库转oracle工具,解压即用,支持表结构转换a
本猿最近做数据库迁移,修改了大量sql语句,对oracle和MySQL语法之间的一些不同之处总结了一些。
一个mysql数据库数据同步至oracle数据库代码,同时修改mysql数据表标识。
mysql和oracle驱动包 mysql-connector-java-5.0.8-bin ojdbc14
是介绍使用mysql和oracle进行分页的技术,还说明了mysql和oracle分页的区别
MySql和oracle区别(全),比较全面的介绍MySql 和oracle 的区别
用于连接mysql和oracle的连接池包, mysql-connector-java-5.0.4-bin.jar oracle.jar
mysql和Oracle的数据同步demo案例