您的位置:首页 > 数据库 > Oracle

最新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]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: