由于最近三年一直用mysql,好多oracle知识都有点生疏了,现在回顾下并记录下
1.表空间
mysql的表空间有共享表空间和独占表空间
独占表空间,其实就是一张表一个表空间,其实也就是一张表一个数据文件
共享表空间似乎有点类似oracle的表空间,不同的表可以保存在同一个数据文件里
但是貌似mysql新版本也有单独创建表空间的方法:
CREATE TABLE t1 (a int KEY, b text) DATA DIRECTORY='/ssd1/my_data';
详细的可以看oracle说明
oracle要先创建好表空间,然后指定某张表放到某个表空间
2.查询语句
在执行顺序上是一样的:开始->FROM子句->WHERE子句->GROUP BY子句->HAVING子句->ORDER BY子句->SELECT子句->LIMIT子句->最终结果
每个子句执行后都会产生一个中间结果 ,供接下来的子句使用,如果不存在某个子句,就跳过。
如日期函数
SQL> select to_char(sysdate,'yyyy-mm-dd') from dual;
mysql> select date_format(now(),'%Y-%m-%d');
增加一个月:
SQL> select to_char(add_months(to_date ('20000101','yyyymmdd'),1),'yyyy-mm-dd') from dual;
结果:2000-02-01
mysql> select date_add('2000-01-01',interval 1 month);
结果:2000-02-01
截取字符串:
SQL> select substr('abcdefg',1,5) from dual;
结果:abcde
mysql> select substring('abcdefg',2,3);
结果:bcd
在MySQL中from 后的表如果是(select.......)这种,那么后面必须有别名
连接字符串在Oracle中用|| ,MySQL中用concat('a','b','c')
变量名不能跟列名相同,否则效果为1=1,且MySQL不区分大小写
mysql的group by 语句可以select 没有被分组的字段
orcale用decode()来转换数据,mysql用case when:
MySql和Orcale的ID自增 实现不一样,mysq是表主键自增长,oracle是通过序列实现
3.事务
oracle很早就完全支持事务。
mysql在innodb存储引擎的行级锁的情况下才支持事务。
4.分区表和分区索引
oracle的分区表和分区索引功能很成熟,可以提高用户访问db的体验。
mysql的分区表还不太成熟稳定。