、mysql与oracle都是关系型数据库,Oracle是大型数据库,而MySQL是中小型数据库。但是MySQL是开源的,但是Oracle是收费的,而且比较贵。
1
2
mysql默认端口:3306,默认用户:root
oracle默认端口:1521,默认用户:system
2、Oracle的内存占有量非常大,而mysql非常小,mysql安装后差不多一两百兆,而oracle则有3G左右,且使用的时候oracle占用特别大的内存空间和其他机器性能。
1
2
mysql登录:mysql -hip -u用户名 -p密码 -P端口号 -D数据库名(h:host、u:user、p:password)
oracle登录:sqlplus user_name/password@ip:port/instance_name;(可以把IP地址,端口号,实例名写在一个TNS文件中取一个别名,登陆的时候输入这个别名就行)
oracle支持大并发,大访问量,是OLTP最好的工具。
3、数据库的层次结构:
1
2
mysql:默认用户是root,用户下可以创建好多数据库,每个数据库下还有好多表,一般情况下都是使用默认用户,不会创建多个用户;
oracle:创建一个数据库,数据库下有好多用户:sys、system、scott等,不同用户下有好多表,一般情况下只创建一个数据库用。
4、数据库中表字段类型:
1
2
mysql:int、float、double等数值型,varchar、char字符型,date、datetime、time、year、timestamp等日期型。
oracle:number(数值型),varchar2、varchar、char(字符型),date(日期型)等…
其中char(2)这样定义,这个单位在oracle中2代表两个字节,mysql中代表两个字符。
其中varchar在mysql中,必须给长度例如varchar(10)不然插入的时候出错。
5、主键
1
MySQL支持主键自增长,指定主键为auto increment,插入时会自动增长。Oracle主键一般使用序列。
6、引号处理:
1
MySQL字符串可以使用双引号包起来,而Oracle只可以单引号
7、分页:
1
MySQL分页用limit关键字,而Oracle使用rownum字段表明位置,而且只能使用小于,不能使用大于。
8、对事物提交:
1
2
mysql默认是自动提交,可以修改为手动提交。
oracle默认不自动提交,需要手动提交,需要在写commit指令或点击commit按钮。
9、事务隔离级别:
1
2
3
4
mysql是repeatable read的隔离级别,而oracle是read commited的隔离级别;
同时二者都支持serializable串行化事务隔离级别,可以实现最高级别的读一致性。每个session提交后其它session才能看到提交的更改;
oracle通过在undo表空间中构造多版本数据块来实现读一致性,每个session查询时,如果对应的数据块发生变化,oracle会在undo空间中为这个session构造它查询时的旧的数据块;
mysql没有类似oracle的构造多版本数据的机制,只支持read commited的隔离级别,一个session读取数据时,其他session不能更改数据,但可以在表最后插入数据,session更新数据时,要加上排它锁,其他session无法访问数据。
10、并发性:
1
2
mysql以表级锁为主,对资源锁定的粒度很大,如果一个session对一个表加锁时间过长,会让其他session无法更新此表中的数据。虽然Innodb引擎表可以用行级锁,但这个行级锁的机制依赖于表的索引,如果表没有索引,<br>或者sql语句没有使用索引,那么仍然使用表级锁;
oracle使用行级锁,对资源锁定的粒度要小很多,只是锁定sql需要的资源,并且加锁是在数据库中的数据行上,不依赖于索引,所以oracle对并发性的支持要好很多。
11、逻辑备份:
1
2
mysql逻辑备份时要锁定数据,才能保证备份的数据是一致的,影响业务正常的dml使用。
oracle逻辑备份时不锁定数据,且备份的数据是一致的。
12、判断真假:
1
MySQL中0、1判断真假,Oracle中true false
13、区分大小写:
1
2
MySQL在windows环境下大小写不敏感 在unix,linux环境下区分大小写。
Oracle不区分
14、日期转换:
1
2
mysql中日期转换用dateformat()函数;
oracle用to_date()与to_char()两个函数。