前言: 关系型数据库必学的还是oracle和mysql,此文章仅代表鄙人的总结和理解,如有错漏,欢迎指正...
一、oracle和mysql的区别
1、事务隔离级别
MySQL是repeatable read的隔离级别,而Oracle是read commited的隔离级别
2、对事务的支持
MySQL在innodb存储引擎的行级锁的情况下才可支持事务,而Oracle则完全支持事务
3、保存数据的持久性
MySQL是在数据库更新或者重启,则会丢失数据,Oracle把提交的sql操作线写入了在线联机日志文件中,保持到了磁盘上,可以随时恢复
4、并发性
MySQL以表级锁为主,对资源锁定的粒度很大,如果一个session对一个表加锁时间过长,会让其他session无法更新此表中的数据。
虽然InnoDB引擎的表可以用行级锁,但这个行级锁的机制依赖于表的索引,如果表没有索引,或者sql语句没有使用索引,那么仍然使用表级锁。
Oracle使用行级锁,对资源锁定的粒度要小很多,只是锁定sql需要的资源,并且加锁是在数据库中的数据行上,不依赖与索引。所以Oracle对并发性的支持要好很多。
5、逻辑备份
MySQL逻辑备份时要锁定数据,才能保证备份的数据是一致的,影响业务正常的dml使用,Oracle逻辑备份时不锁定数据,且备份的数据是一致
6、复制
MySQL:复制服务器配置简单,但主库出问题时,丛库有可能丢失一定的数据。且需要手工切换丛库到主库。
Oracle:既有推或拉式的传统数据复制,也有dataguard的双机或多机容灾机制,主库出现问题是,可以自动切换备库到主库,但配置管理较复杂。
7、最重要的区别
MySQL是轻量型数据库,并且免费,没有服务恢复数据。
Oracle是重量型数据库,收费,Oracle公司对Oracle数据库有任何服务。
二、为什么用oracle不用mysql?
公司数据量庞大,更注重数据的安全性和高效存储,并且关心的出现问题的时候能快速解决,Oracle提供的一系列服务正好符合它们的需求。
1、行级锁功能更强大
2、联机日志保证数据可恢复
3、逻辑备份不锁表4成熟的热备工具rman,通过联机日志保证热备数据一致性
三、Mysql的DB引擎你了解多少?
Innodb引擎: 提供了对数据库ACID事务的支持,并且实现了SQL标准的四种隔离级别,当需要使用数据库事务时,该引擎当然是首选
MyIASM引擎: MySQL默认的引擎,没有提供数据库事务的支持,插入和更新要锁定整个表比较慢,这个引擎适合对于读操作比写操作多情况
MySQL常用的存储引擎是InnoDB,相对于MyISAM而言。InnoDB更适合高并发场景,同时也支持事务处理。
InnoDB和MyISAM的最大不同点有三个:
1、InnoDB支持事务(transaction);
2、InnoDB采用行级锁。加锁可以保证事务的一致性,可谓是有人(锁)的地方,就有江湖(事务);
3、MyISAM采用表级锁
四、数据库中比如INT(11),VARCHAR(50)代表什么呢?
INT(11)中11代表的并不是长度,而是字符的显示宽度,在字段类型为int时,无论你显示宽度设置为多少,int类型能存储的最大值和最小值永远都是固定的,设置字段的显示宽度并不限制字段存储值的范围,比如字段d设置为int(5),但是仍然可以存储1234567890这个10位数字
MySQL中varchar最大长度是多少?
1、varchar存储规则:
1、4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节)
2、5.0版本以上,varchar(20),指的是20字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放20个,最大大小是65532字节
3、Mysql4中最大也不过是20个字节,但是Mysql5根据编码不同,存储大小也不同。
2、varchar和char 的区别:
char是一种固定长度的类型,varchar则是一种可变长度的类型,它们的区别是:
char(M)类型的数据列里,每个值都占用M个字节,如果某个长度小于M,MySQL就会在它的右边用空格字符补足(在检索操作中那些填补出来的空格字符将被去掉),在varchar(M)类型的数据列里,每个值只占用刚好够用的字节再加上一个用来记录其长度的字节(即总长度为L+1字节)
结语:以往都是看别人的博客进行学习技术,其中不乏有精华博客也有吊儿郎当的CV大法文章,所以决定将自己所学所用所整理的知识分享给大家,主要还是想为了后浪们少走些弯路,多些正能量的博客,如有错漏,欢迎指正,仅希望大家能在我的博客中学到知识,解决到问题,那么就足够了。谢谢大家!(转载请注明原文出处)