最新Oracle 和 mysql 的对比参照----开发篇
2008-06-04 10:36
621 查看
[align=left] [/align] | [align=left]Oracle[/align] | [align=left]mysql[/align] |
[align=left]对比版本[/align] | [align=left]Release 10.2.0.1.0 XE windowsXP [/align] | [align=left]5.0.45-community-nt-log MySQL Community Edition (GPL)[/align] |
[align=left]当作计算器[/align] | [align=left]SQL> select 1+1 from dual;[/align] | [align=left]mysql> select 1+1;[/align] |
[align=left]mysql> select 1+1 from dual;[/align] | ||
[align=left]显示表结构[/align] | [align=left]SQL> desc 表名[/align] | [align=left]mysql> desc 表名;[/align] |
[align=left]SQL> describe 表名[/align] | [align=left]mysql> describe 表名;[/align] | |
[align=left]mysql> explain 表名;[/align] [align=left]注意:explain 也可以用来获取执行计划。[/align] | ||
[align=left]需要访问:[/align] [align=left]User_tables、user_tab_cols、USER_COL_COMMENTS、USER_INDEXES等等字典表。[/align] | [align=left]mysql> show columns from 表名;[/align] | |
[align=left] [/align] | [align=left]bin>mysqlshow 库名表名[/align] | |
[align=left]日期的概念[/align] | [align=left]一个完全不同于字符串的类型。日期类型没有所谓的格式,日期就是日期,只有在显示的时候可以指定转换成的字符串的格式。绝对不会允许2008-00-00这种情况出现。对于日期转换为另一个日期相对比较简单,比如select trunc(sysdate) fromdual;[/align] | [align=left]可以方便的和字符串进行比较、转换。允许0000-00-00这种情况出现作为null的替代品方便处理(个人不认为这样比较方便,反而给我造成困惑)。对于字符串转换为日期比较简单,比如CREATETABLE `datetime` ([/align] [align=left] `dt` datetime NOTNULLdefault'0000-00-00 00:00:00',[/align] [align=left] PRIMARYKEY (`dt`)[/align] [align=left]);[/align] [align=left]INSERTINTO `datetime` VALUES ('2008-01-01 00:00:00');[/align] [align=left]select*from `datetime`;[/align] |
[align=left]日期类型[/align] | [align=left]date[/align] | [align=left]datetime[/align] |
[align=left]无[/align] | [align=left]Date[/align] [align=left]日期[/align] | |
[align=left]无[/align] | [align=left]Time[/align] [align=left]时间[/align] | |
[align=left]无[/align] | [align=left]Timestamp[/align] [align=left]如果表中其他字段变化,此类型的字段自动更新为当前系统时间。[/align] | |
[align=left]Timestamp[/align] [align=left]保存了毫秒级别的时间[/align] | [align=left]不清楚[/align] | |
[align=left]日期函数[/align] | [align=left]SQL> select trunc(sysdate)from dual;[/align] | [align=left]mysql> select curdate();[/align] [align=left]mysql> select current_date;[/align] |
[align=left]SQL> select sysdate from dual;[/align] | [align=left]mysql> select sysdate();[/align] | |
[align=left]mysql> select now();[/align] | ||
[align=left]SQL> select to_char(sysdate,'HH24:Mi:SS')from dual;[/align] [align=left]注意此处返回结果为字符串,而不是日期类型。Oracle不提供和mysql中time类型相应的类型。[/align] | [align=left]mysql> select current_time;[/align] [align=left]mysql> select curtime();[/align] [align=left]注意:此处返回的是time类型。就是时间17:22:14这种时间。Oracle中没有此类型。[/align] | |
[align=left]毫秒级别:[/align] [align=left]SQL> selectcurrent_timestampfrom dual;[/align] | [align=left]需要使用函数MICROSECOND。目前还不会。[/align] | |
[align=left]日期格式化[/align] | [align=left]SQL> select to_char(sysdate,'yyyy-mm-dd') from dual;[/align] | [align=left]mysql> select date_format(now(),'%Y-%m-%d');[/align] |
[align=left]SQL> select to_char(sysdate,'hh24-mi-ss') from dual;[/align] | [align=left]mysql> select time_format(now(),'%H-%i-%S');[/align] | |
[align=left]日期函数[/align] [align=left](增加一天)[/align] | [align=left]SQL> select sysdate+1from dual;[/align] [align=left]结果:2008-2-20 19:34:27[/align] | [align=left]mysql> select date_add(now(),interval 1 day);[/align] |
[align=left]mysql>select now()+interval 1 day;[/align] | ||
[align=left]日期函数[/align] [align=left](增加一个月)[/align] | [align=left]SQL> select add_months(sysdate,1)from dual;[/align] [align=left]结果:2008-3-19 19:34:27[/align] | [align=left]mysql> select date_add(now(),interval 1 month); [/align] |
[align=left]mysql>select now()+interval 1 month;[/align] | ||
[align=left]别名[/align] | [align=left]SQL> select1as a from dual;[/align] | [align=left]mysql> select1as a;[/align] |
[align=left]SQL> select1 a from dual;[/align] | [align=left]mysql> select1 a;[/align] | |
[align=left]字符串截取函数[/align] | [align=left]SQL> select substr('abcdefg',1,5)from dual;[/align] [align=left]结果:abcde[/align] | [align=left]mysql> select substr('abcdefg',1,5);[/align] [align=left]结果:abcde[/align] |
[align=left]去除空格:[/align] [align=left]select trim('abc ')from dual;[/align] | [align=left]去除空格:[/align] [align=left]select trim('abc ')from dual;[/align] | |
[align=left]字符串拼接:[/align] [align=left]SELECT CONCAT('a',' test')from dual;[/align] [align=left]结果:a test[/align] | [align=left]SELECT CONCAT('a',' test');[/align] [align=left]结果:a test[/align] | |
[align=left]注意oracle中||为字符串拼接[/align] [align=left]select'a'||' test'from dual;[/align] [align=left]结果:a test[/align] | [align=left]注意mysql中||为或操作符。[/align] [align=left]select 0||1;[/align] [align=left]结果1;[/align] [align=left]Select 0||0;[/align] [align=left]结果0。[/align] | |
[align=left]判断是否包含:[/align] [align=left]select instr('abcd','bcd')from dual;[/align] [align=left]结果:2[/align] | [align=left]mysql> SELECT INSTR('foobarbar', 'bar');[/align] [align=left]结果:4[/align] | |
[align=left]另有正则表达式。[/align] | [align=left]另有SUBSTRING_INDEX(str,delim,count)函数[/align] | |
[align=left]执行sql脚本[/align] | [align=left]SQL >@a.sql[/align] | [align=left]1:mysql> source a.sql [/align] |
[align=left]执行外部shell脚本[/align] | [align=left]SQL>host test.sh[/align] | [align=left]目前还不会[/align] |
[align=left]SQL>! cd ..[/align] | ||
[align=left]改表名[/align] | [align=left]SQL> altertable T renameto T1;[/align] | [align=left]mysql> alter table t rename t1; [/align] |
[align=left]mysql> alter table T1 rename to T;[/align] | ||
[align=left]执行命令[/align] | [align=left];<回车>[/align] | [align=left];<回车>[/align] |
[align=left]/[/align] | [align=left]go[/align] | |
[align=left]r[/align] | [align=left]ego[/align] | |
[align=left]run[/align] | [align=left] [/align] | |
[align=left]distinct用法[/align] | [align=left]SQL> select distinct 列1 from 表1;[/align] | [align=left]mysql> select distinct 列1 from 表1;[/align] |
[align=left]SQL> select distinct 列1,列2 from 表1;[/align] | [align=left]mysql> select distinct 列1,列2 from 表1;[/align] | |
[align=left]注释[/align] | [align=left]--[/align] | [align=left]--[/align] |
[align=left]/* 与*/[/align] | [align=left]/*与*/[/align] | |
[align=left]REM[/align] | [align=left]#[/align] | |
[align=left]限制返回记录条数为5条[/align] | [align=left]SQL> select * from 表名 where rownum<=5;[/align] | [align=left]mysql> select * from 表名 limit 5;[/align] |
[align=left]分页查询[/align] | [align=left]select*[/align] [align=left]from ([/align] [align=left]select row_.*, rownum rownum_[/align] [align=left]from ([/align] [align=left]yourSqlHere ) row_[/align] [align=left]where rownum <= 100)[/align] [align=left]where rownum_ > 20;[/align] | [align=left]select*from t limit20,100;[/align] |
[align=left]外连接[/align] | [align=left] (+)[/align] | [align=left]left join[/align] |
[align=left]LEFTOUTERJOIN[/align] | [align=left]left outer join[/align] | |
[align=left]RIGHTOUTERJOIN[/align] | [align=left] [/align] | |
[align=left]查询索引[/align] | [align=left]SQL> select index_name,table_name from user_indexes;[/align] | [align=left]mysql> show index from 表名 [FROM 库名];[/align] |
[align=left]通配符[/align] | [align=left]“%”[/align] | [align=left]“%”和“_”[/align] |
[align=left]如果存在则更新,否则插入[/align] | [align=left]Merge into[/align] | [align=left]Replace into [/align] [align=left]参见,mysql的replace没有oracle的merge严格:[/align] [align=left]http://www.bitbybit.dk/carsten/blog/?p=128#comment-50048[/align] |
[align=left]SQL语法[/align] | [align=left]SELECT selection_list 选择哪些列[/align] | [align=left]SELECT selection_list 选择哪些列[/align] |
[align=left]FROM table_list 从何处选择行[/align] | [align=left]FROM table_list 从何处选择行[/align] | |
[align=left]WHERE primary_constraint 行必须满足什么条件[/align] | [align=left]WHERE primary_constraint 行必须满足什么条件[/align] | |
[align=left]GROUP BY grouping_columns 怎样对结果分组[/align] [align=left]注意:oracle如果需要排序必须指定order by 子句。[/align] | [align=left]GROUP BY grouping_columns 怎样对结果分组[/align] [align=left]注意:即使不存在order by子句,mysql也会按照group by 的列进行排序。甚至还能为group by 语句指定asc/desc子句。[/align] | |
[align=left]HAVING secondary_constraint 行必须满足的第二条件[/align] | [align=left]HAVING secondary_constraint 行必须满足的第二条件[/align] | |
[align=left]ORDER BY sorting_columns 怎样对结果排序[/align] | [align=left]ORDER BY sorting_columns 怎样对结果排序[/align] | |
[align=left]Oracle的结果集限定语句见:”分页查询”[/align] [align=left]注意:oracle的rownum和mysql的Limit完全不同。[/align] | [align=left]LIMIT count 结果限定[/align] | |
[align=left]对not in null的处理,是关于三值逻辑的问题。[/align] | [align=left]CREATETABLE a[/align] [align=left]( code INT);[/align] [align=left]INSERTINTO a[/align] [align=left] VALUES(2);[/align] [align=left]INSERTINTO a[/align] [align=left] VALUES(NULL);[/align] [align=left]SELECT1[/align] [align=left] FROM DUAL[/align] [align=left] WHERE1NOTIN(SELECT code FROM a);[/align] 结果:无返回结果。 | [align=left]CREATETABLE a[/align] [align=left]( code INT);[/align] [align=left]INSERTINTO a[/align] [align=left] VALUES(2);[/align] [align=left]INSERTINTO a[/align] [align=left] VALUES(NULL);[/align] [align=left]SELECT1[/align] [align=left] FROM DUAL[/align] [align=left] WHERE1NOTIN(SELECT code FROM a);[/align] [align=left]结果:无返回结果[/align] |
[align=left]对not exists的处理[/align] | [align=left]CREATETABLE a[/align] [align=left]( code INT);[/align] [align=left]INSERTINTO a[/align] [align=left] VALUES(2);[/align] [align=left]INSERTINTO a[/align] [align=left] VALUES(NULL);[/align] [align=left]SELECT1[/align] [align=left] FROM DUAL[/align] [align=left] WHERENOTEXISTS(SELECT1[/align] [align=left] FROM a WHERE a.code =1);[/align] 结果:1 | [align=left]CREATETABLE a[/align] [align=left]( code INT);[/align] [align=left]INSERTINTO a[/align] [align=left] VALUES(2);[/align] [align=left]INSERTINTO a[/align] [align=left] VALUES(NULL);[/align] [align=left]SELECT1[/align] [align=left] FROM DUAL[/align] [align=left] WHERENOTEXISTS(SELECT1[/align] [align=left] FROM a WHERE a.code =1);[/align] 结果:1 |
[align=left]获取sql语句执行计划[/align] | SQL>EXPLAIN PLAN FOR select * from t; 然后 SQL>select * from table(DBMS_XPLAN.DISPLAY) | [align=left]Mysql> explainselect*from t;[/align] |
[align=left]执行计划对照[/align] | 全表扫描: TABLE ACCESS FULL | [align=left]Type=all[/align] |
Where条件过滤:FILTER | [align=left]Extra=Using where[/align] | |
排序:SORT ORDER BY | [align=left]Extra=Using filesort[/align] | |
[align=left]事务管理[/align] | [align=left]默认不自动提交[/align] | [align=left]innoDB支持事务[/align] |
[align=left]默认自动提交autocommit[/align] | ||
[align=left]阻塞读取方式[/align] | [align=left] [/align] | [align=left] [/align] |
[align=left]Unique index的区别。[/align] [align=left]又是关于三值逻辑的问题。[/align] | [align=left]CREATETABLE hr.t ([/align] [align=left] IDINTNOTNULL,[/align] [align=left] DATACHAR(30)DEFAULTNULL,[/align] [align=left] UNIQUE(ID,DATA)[/align] [align=left] );[/align] [align=left] [/align] [align=left]INSERTINTO hr.t[/align] [align=left] VALUES(1,NULL);[/align] [align=left] [/align] [align=left]INSERTINTO hr.t[/align] [align=left] VALUES(1,NULL);[/align] | [align=left]mysql> CREATE TABLE t ([/align] [align=left] ID INT NOT NULL,[/align] [align=left] DATA CHAR(30) DEFAULT NULL,[/align] [align=left] UNIQUE (ID, DATA)[/align] [align=left] );[/align] [align=left]INSERT INTO t[/align] [align=left] VALUES (1, NULL);[/align] [align=left]INSERT INTO t[/align] [align=left] VALUES (1, NULL);[/align] [align=left]select * from t;[/align] [align=left]Query OK, 0 rows affected[/align] [align=left]Query OK, 1 row affected[/align] [align=left]Query OK, 1 row affected[/align] [align=left]+----+------+[/align] [align=left]| ID | DATA |[/align] [align=left]+----+------+[/align] [align=left]| 1 | NULL |[/align] [align=left]| 1 | NULL |[/align] [align=left]+----+------+[/align] [align=left]2 rows in set[/align] |
[align=left]ORA-00001: 违反唯一约束条件 (HR.SYS_C003999) [/align] |
相关文章推荐
- 最新Oracle 和 mysql 的对比参照----开发篇
- 【转】最新Oracle 和 mysql 的对比参照----开发篇
- 最新Oracle 和 mysql 的对比参照
- 最新Oracle 和 mysql 的对比参照
- 最新Oracle 和 mysql 的对比参照----管理篇
- 最新Oracle 和 mysql 的对比参照----开发篇
- 最新Oracle 和 mysql 的对比参照----开发篇(转)
- 最新Oracle 和 mysql 的对比参照----安装与基础篇
- 最新Oracle 和 mysql 的对比参照----管理篇
- 最新Oracle 和 mysql 的对比参照----管理篇
- 最新Oracle 和 mysql 的对比参照----开发篇
- 最新Oracle 和 mysql 的对比参照----安装与基础篇
- 转贴 Oracle 和 mysql 的一些简单命令对比参照 [2004年6月25日 22:35]
- Oracle 和 mysql 的一些简单命令对比参照
- Oracle 和 mysql 的一些简单命令对比参照
- Oracle 和 mysql 的一些简单命令对比参照
- Oracle 和 mysql 的一些简单命令对比参照
- Oracle和mysql 的一些简单命令对比参照
- Oracle 和 mysql 的一些简单命令对比参照
- Oracle 和 mysql 的一些简单命令对比参照