forbidden是什么意思啊了MySQL和Oracle的区别
由于SQL Server不常⽤,所以这⾥只针对MySQL数据库和Oracle数据库的区别
(1) 对事务的提交
MySQL默认是⾃动提交,⽽Oracle默认不⾃动提交,需要⽤户⼿动提交,需要在写commit;指令或者点击commit按钮
(2) 分页查询
MySQL是直接在SQL语句中写" from ...limit x, y",有limit就可以实现分页;⽽Oracle则是需要⽤到伪列ROWNUM和嵌套查询(3) 事务隔离级别
MySQL是read commited的隔离级别,⽽Oracle是repeatable read的隔离级别,同时⼆者都⽀持serializable串⾏化事务隔离级别,可以实现最⾼级别的
读⼀致性。每个session提交后其他session才能看到提交的更改。Oracle通过在undo表空间中构造多版本数据块来实现读⼀致性,每个session
查询时,如果对应的数据块发⽣变化,Oracle会在undo表空间中为这个session构造它查询时的旧的数据块
MySQL没有类似Oracle的构造多版本数据块的机制,只⽀持read commited的隔离级别。⼀个session读取数据时,其他session不能更改数据,但
可以在表最后插⼊数据。session更新数据时,要加上排它锁,其他session⽆法访问数据
(4) 对事务的⽀持
MySQL在innodb存储引擎的⾏级锁的情况下才可⽀持事务,⽽Oracle则完全⽀持事务
(5) 保存数据的持久性
MySQL是在数据库更新或者重启,则会丢失数据,Oracle把提交的sql操作线写⼊了在线联机⽇志⽂件中,保持到了磁盘上,可以随时恢复
(6) 并发性
MySQL以表级锁为主,对资源锁定的粒度很⼤,如果⼀个session对⼀个表加锁时间过长,会让其他session⽆法更新此表中的数据。
虽然InnoDB引擎的表可以⽤⾏级锁,但这个⾏级锁的机制依赖于表的索引,如果表没有索引,或者sql语句没有使⽤索引,那么仍然使⽤表级锁。
Oracle使⽤⾏级锁,对资源锁定的粒度要⼩很多,只是锁定sql需要的资源,并且加锁是在数据库中的数据⾏上,不依赖与索引。所以Oracle对并
发性的⽀持要好很多。
(7) 逻辑备份
MySQL逻辑备份时要锁定数据,才能保证备份的数据是⼀致的,影响业务正常的dml使⽤,Oracle逻辑备份时不锁定数据,且备份的数据是⼀致
win10一直卡在重要设置(8) 复制
MySQL:复制服务器配置简单,但主库出问题时,丛库有可能丢失⼀定的数据。且需要⼿⼯切换丛库到主库。
Oracle:既有推或拉式的传统数据复制,也有dataguard的双机或多机容灾机制,主库出现问题是,可以⾃动切换备库到主库,但配置管理较复杂。
(9) 性能诊断
MySQL的诊断调优⽅法较少,主要有慢查询⽇志。
Oracle有各种成熟的性能诊断调优⼯具,能实现很多⾃动分析、诊断功能。⽐如awr、addm、sqltrace、tkproof等
(10)权限与安全
MySQL的⽤户与主机有关,感觉没有什么意义,另外更容易被仿冒主机及ip有可乘之机。
Oracle的权限与安全概念⽐较传统,中规中矩。
mysql语句转oracle(11)分区表和分区索引
MySQL的分区表还不太成熟稳定。
把springboot项目发布到服务器上Oracle的分区表和分区索引功能很成熟,可以提⾼⽤户访问db的体验。
(12)管理⼯具
MySQL管理⼯具较少,在linux下的管理⼯具的安装有时要安装额外的包(phpmyadmin, etc),有⼀定复杂性。
Oracle有多种成熟的命令⾏、图形界⾯、web管理⼯具,还有很多第三⽅的管理⼯具,管理极其⽅便⾼效。
(13)最重要的区别
MySQL是轻量型数据库,并且免费,没有服务恢复数据。
Oracle是重量型数据库,收费,Oracle公司对Oracle数据库有任何服务。
(13) ⾃动增长的数据类型处理
MYSQL有⾃动增长的数据类型,插⼊记录时不⽤操作此字段,会⾃动获得数据值。ORACLE没有⾃动增长的数据类型,需要建⽴⼀个⾃动增长的序列号,插⼊记录时要把序列号的下⼀个值赋于此字段。
符号unicode码CREATE SEQUENCE 序列号的名称 (最好是表名+序列号标记) INCREMENT BY 1 START WITH 1 MAXVALUE 99999 CYCLE NOCACHE;
其中最⼤的值按字段的长度来定, 如果定义的⾃动增长的序列号 NUMBER(6) , 最⼤值为999999
INSERT 语句插⼊这个字段值为: 序列号的名称.NEXTVAL
(14) 单引号的处理
MYSQL⾥可以⽤双引号包起字符串,ORACLE⾥只可以⽤单引号包起字符串。在插⼊和修改字符串前必须做单引号的替换:把所有出现的⼀个单引号替换成两个单引号。
(15) 翻页的SQL语句的处理
MYSQL处理翻页的SQL语句⽐较简单,⽤LIMIT 开始位置, 记录个数;PHP⾥还可以⽤SEEK定位到结果集的位置。ORACLE处理翻页的SQL语句就⽐较繁琐了。每个结果集只有⼀个ROWNUM字段标明它的位置, 并且只能⽤ROWNUM<100, 不能⽤ROWNUM>80。(16) 长字符串的处理
长字符串的处理ORACLE也有它特殊的地⽅。INSERT和UPDATE时最⼤可操作的字符串长度⼩于等于4000个单字节, 如果要插⼊更长的字符串, 请考虑字段⽤CLOB类型,⽅法借⽤ORACLE⾥⾃带的DBMS_LOB程序包。插⼊修改记录前⼀定要做进⾏⾮空和长度判断,不能为空的字段值和超出长度字段值都应该提出警告,返回上次操作。
(17) ⽇期字段的处理
MYSQL⽇期字段分DATE和TIME两种,ORACLE⽇期字段只有DATE,包含年⽉⽇时分秒信息,⽤当前的系统时间为SYSDATE, 精确到秒,或者⽤字符串转换成⽇期型函数TO_DATE(‘<st1:chsdate isrocdate="False" islunardate="False" day="1" month="8"
year="2001">2001-08-01</st1:chsdate>’,’YYYY-MM-DD’)年-⽉-⽇ 24⼩时:分钟:秒的格式YYYY-MM-DD HH24:MI:SS TO_DATE()还有很多种⽇期格式, 可以参看ORACLE DOC.⽇期型字段转换成字符串函数TO_CHAR(‘<st1:chsdate isrocdate="False" islunardate="False"
day="1" month="8" year="2001">2001-08-01</st1:chsdate>’,’YYYY-MM-DD HH24:MI:SS’)
matlab解含三个参数的方程组⽇期字段的数学运算公式有很⼤的不同。MYSQL到离当前时间7天⽤ DATE_FIELD_NAME > SUBDATE(NOW(),INTERVAL 7 DAY)ORACLE到离当前时间7天⽤ DATE_FIELD_NAME >SYSDATE - 7;
(18) 空字符的处理
MYSQL的⾮空字段也有空的内容,ORACLE⾥定义了⾮空字段就不容许有空的内容。按MYSQL的NOT NULL来定义ORACLE表结构, 导数据的时候会产⽣错误。因此导数据时要对空字符进⾏判断,如果为NULL或空字符,需要把它改成⼀个空格的字符串。
(19)字符串的模糊⽐较
MYSQL⾥⽤字段名 like '%字符串%',ORACLE⾥也可以⽤字段名 like '%字符串%' 但这种⽅法不能使⽤索引, 速度不快,⽤字符串⽐较函数 instr(字段名,'字符串')>0 会得到更精确的查结果。
(20)程序和函数⾥,操作数据库的⼯作完成后请注意结果集和指针的释放。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论