日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

最新Oracle 和 mysql 的對比參照----開發(fā)篇

 pengx 2009-02-24
 

 

Oracle

mysql

對比版本

Release 10.2.0.1.0 XE  windowsXP

5.0.45-community-nt-log MySQL Community Edition (GPL)

當作計算器

SQL> select 1+1 from dual;

mysql> select 1+1;

mysql> select 1+1 from dual;

顯示表結(jié)構(gòu)

SQL> desc 表名

mysql> desc 表名;

SQL> describe 表名

mysql> describe 表名;

 

mysql> explain  表名;

注意explain 也可以用來獲取執(zhí)行計劃。

需要訪問:

User_tablesuser_tab_cols、USER_COL_COMMENTSUSER_INDEXES等等字典表。

mysql> show columns from 表名;

 

bin>mysqlshow 庫名 表名

日期的概念

一個完全不同于字符串的類型。日期類型沒有所謂的格式,日期就是日期,只有在顯示的時候可以指定轉(zhuǎn)換成的字符串的格式。絕對不會允許2008-00-00這種情況出現(xiàn)。對于日期轉(zhuǎn)換為另一個日期相對比較簡單,比如select trunc(sysdate) from dual;

可以方便的和字符串進行比較、轉(zhuǎn)換 。允許0000-00-00這種情況出現(xiàn)作為null的替代品方便處理(個人不認為這樣比較方便,反而給我造成困惑)。對于字符串轉(zhuǎn)換為日期比較簡單,比如CREATE TABLE `datetime` (

 `dt` datetime NOT NULL default '0000-00-00 00:00:00',

  PRIMARY KEY  (`dt`)

);

INSERT INTO `datetime` VALUES ('2008-01-01 00:00:00');

select * from `datetime`;

日期類型

date

datetime

Date

日期

Time

時間

Timestamp

如果表中其他字段變化,此類型的字段自動更新為當前系統(tǒng)時間。

Timestamp

保存了毫秒級別的時間

不清楚

日期函數(shù)

SQL> select trunc(sysdate) from dual;

mysql> select curdate();

mysql> select current_date;

SQL> select sysdate from dual;

mysql> select sysdate();

mysql> select now();

SQL> select to_char(sysdate,'HH24:Mi:SS') from dual;

注意此處返回結(jié)果為字符串,而不是日期類型。Oracle不提供和mysqltime類型相應(yīng)的類型。

mysql> select current_time;

mysql> select curtime();

注意:此處返回的是time類型。就是時間17:22:14這種時間。Oracle中沒有此類型。

毫秒級別:

SQL> select current_timestamp from dual;

需要使用函數(shù)MICROSECOND。目前還不會。

日期格式化

SQL> select to_char(sysdate,'yyyy-mm-dd') from dual;

mysql> select date_format(now(),'%Y-%m-%d');

SQL> select to_char(sysdate,'hh24-mi-ss') from dual;

mysql> select time_format(now(),'%H-%i-%S');

日期函數(shù)

(增加一天)

SQL> select sysdate+1 from dual;

結(jié)果:2008-2-20 19:34:27

mysql> select date_add(now(),interval 1 day);

mysql>select now()+interval 1 day;

日期函數(shù)

(增加一個月)

SQL> select add_months(sysdate,1) from dual;

結(jié)果:2008-3-19 19:34:27

mysql> select date_add(now(),interval 1 month);

mysql>select now()+interval 1 month;

別名

SQL> select 1 as a from dual;

mysql> select 1 as a;

SQL> select 1 a from dual;

mysql> select 1 a;

字符串截取函數(shù)

SQL> select substr('abcdefg',1,5) from dual;

結(jié)果:abcde

mysql> select substr('abcdefg',1,5);

結(jié)果:abcde

去除空格:

select trim('abc   ') from dual;

去除空格:

select trim('abc   ') from dual;

字符串拼接:

SELECT CONCAT('a',' test') from dual;

結(jié)果:a test

SELECT CONCAT('a',' test');

結(jié)果:a test

注意oracle||為字符串拼接

select 'a'||' test' from dual;

結(jié)果:a test

注意mysql||為或操作符。

select 0||1;

結(jié)果1;

Select 0||0;

結(jié)果0。

判斷是否包含:

select instr('abcd','bcd') from dual;

結(jié)果:2

mysql> SELECT INSTR('foobarbar', 'bar');

結(jié)果:4

另有正則表達式。

另有SUBSTRING_INDEX(str,delim,count)函數(shù)

執(zhí)行sql腳本

SQL >@a.sql

1mysql> source a.sql

執(zhí)行外部shell腳本

SQL>host test.sh

目前還不會

SQL>! cd ..

改表名

SQL> alter table T rename to T1;

mysql> alter table t rename t1;

mysql> alter table T1 rename to  T;

執(zhí)行命令

;<回車>

;<回車>

/

go

r

ego

run

 

distinct用法

SQL> select distinct 1 from 1;

mysql> select distinct 1 from 1;

SQL> select distinct 1,2 from 1;

mysql> select distinct 1,2 from 1;

注釋

--

--

/* */

/**/

REM

#

限制返回記錄條數(shù)為5

SQL> select * from 表名 where rownum<=5;

mysql> select * from 表名 limit 5;

分頁查詢

select *

from (

select row_.*, rownum rownum_

from (

yourSqlHere ) row_

where rownum <= 100)

where rownum_ > 20;

select * from t limit 20,100;

外連接

 (+)

left join

LEFT OUTER JOIN

left outer join

RIGHT OUTER JOIN

 

查詢索引

SQL> select index_name,table_name from user_indexes;

mysql> show index from 表名 [FROM 庫名];

通配符

“%”

“%”“_”

如果存在則更新,否則插入

Merge into

Replace into

參見,mysqlreplace沒有oraclemerge嚴格:

http://www./carsten/blog/?p=128#comment-50048

SQL語法

SELECT selection_list 選擇哪些列

SELECT selection_list 選擇哪些列

FROM table_list 從何處選擇行

FROM table_list 從何處選擇行

WHERE primary_constraint 行必須滿足什么條件

WHERE primary_constraint 行必須滿足什么條件

GROUP BY grouping_columns 怎樣對結(jié)果分組

注意oracle如果需要排序必須指定order by 子句。

GROUP BY grouping_columns 怎樣對結(jié)果分組

注意:即使不存在order by子句,mysql也會按照group by 的列進行排序。甚至還能為group by 語句指定asc/desc子句。

HAVING secondary_constraint 行必須滿足的第二條件

HAVING secondary_constraint 行必須滿足的第二條件

ORDER BY sorting_columns 怎樣對結(jié)果排序

ORDER BY sorting_columns 怎樣對結(jié)果排序

Oracle的結(jié)果集限定語句見:分頁查詢

注意oraclerownummysqlLimit完全不同。

LIMIT count 結(jié)果限定

not in null的處理,是關(guān)于三值邏輯的問題。

CREATE TABLE a

( code INT );

INSERT INTO a

     VALUES (2);

INSERT INTO a

     VALUES (NULL);

SELECT 1

  FROM DUAL

 WHERE 1 NOT IN (SELECT code  FROM a);

結(jié)果:無返回結(jié)果。

CREATE TABLE a

( code INT );

INSERT INTO a

     VALUES (2);

INSERT INTO a

     VALUES (NULL);

SELECT 1

  FROM DUAL

 WHERE 1 NOT IN (SELECT code  FROM a);

結(jié)果:無返回結(jié)果

not exists的處理

CREATE TABLE a

( code INT );

INSERT INTO a

     VALUES (2);

INSERT INTO a

     VALUES (NULL);

SELECT 1

  FROM DUAL

 WHERE NOT EXISTS (SELECT 1

                     FROM a WHERE a.code = 1);

結(jié)果:1

CREATE TABLE a

( code INT );

INSERT INTO a

     VALUES (2);

INSERT INTO a

     VALUES (NULL);

SELECT 1

  FROM DUAL

 WHERE NOT EXISTS (SELECT 1

                     FROM a WHERE a.code = 1);

結(jié)果:1

獲取sql語句執(zhí)行計劃

SQL>EXPLAIN PLAN FOR   select * from t;

然后

SQL>select * from table(DBMS_XPLAN.DISPLAY)

Mysql> explain select * from t;

執(zhí)行計劃對照

全表掃描: TABLE ACCESS FULL

Type=all

Where條件過濾:FILTER

Extra=Using where

排序:SORT ORDER BY

Extra=Using filesort

   
   

事務(wù)管理

默認不自動提交

innoDB支持事務(wù)

默認自動提交autocommit

阻塞讀取方式

 

 

Unique index的區(qū)別。

又是關(guān)于三值邏輯的問題。

CREATE TABLE hr.t (

   ID INT NOT NULL,

   DATA CHAR(30) DEFAULT NULL,

   UNIQUE (ID, DATA)

  );

 

INSERT INTO hr.t

     VALUES (1, NULL);

 

INSERT INTO hr.t

     VALUES (1, NULL);

mysql> CREATE TABLE t (

   ID INT NOT NULL,

   DATA CHAR(30) DEFAULT NULL,

   UNIQUE (ID, DATA)

  );

INSERT INTO t

     VALUES (1, NULL);

INSERT INTO t

     VALUES (1, NULL);

select * from t;

Query OK, 0 rows affected

Query OK, 1 row affected

Query OK, 1 row affected

+----+------+

| ID | DATA |

+----+------+

|  1 | NULL |

|  1 | NULL |

+----+------+

2 rows in set

ORA-00001: 違反唯一約束條件 (HR.SYS_C003999)

 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多