1. 程式人生 > >Oracle和MySQL資料庫的比較

Oracle和MySQL資料庫的比較

  • 本次使用Oracle11g和MySQL5.0作比較,目的是為了整理和鞏固所學的資料庫知識,也為了加深印象.(本人菜鳥,請大神們多多指教)

不同點

  1. 所佔記憶體不同
  • Oracle11g在官網上下載的時候顯示大約2g大小的解壓包Oracle11g在官網上下載的時候顯示大約2g大小的解壓包
    在這裡插入圖片描述
  • 而MySQL5.0版本有windows的安裝程式,差不多40m左右
    在這裡插入圖片描述
  1. 所支援的SQL語句略有不同
  • Oracle中除了支援標準的SQL語句之外,還定義有Oracle獨有的SQL語句,例如日期函式,
  • 在Oracle中存在一個日期偽列SYSTDATE,可以通過這個日期偽列列出當前時間
  • 要在Oracle中實現emp分頁,需要通過子查詢的方式實現,大致如下(currentpage表示當前所在頁數,linesize表示每頁顯示資料個數)
SELECT empno,ename,job
FROM(
	SELECT empno,ename,job,ROWNUM rn FROM emp WHERE ROWNUM <= currentpage*linesize
)temp
WHERE temp.rn > (currentpage-1)*linesize;

在這裡插入圖片描述

  • 而在MySQL中實現要實現分頁主需要在查詢語句的後面新增一個 limit 關鍵字即可
  • 例如在MySQL中定義有一個news表,如果要實現news表的分頁查詢在MySQL中的SQL語句大致如下
select * from news limit 5,10;

在這裡插入圖片描述

  1. 事務處理不同
  • 在Oracle中建立的資料表都可以使用進行事務處理,例如資料回滾,事物提交等等.
  • 而在MySQL中有兩種引擎,一種是沒有進行事物處理的,還有一種是可以進行事物處理的,在MySQL中建立一個數據表的時候在語句後面新增一個engine="innodb"表示可以進行事物處理
DROP TABLE news;
CREATE TABLE news(
	nid BIGINT 	AUTO_INCREMENT,
	price DOUBLE,
	title VARCHAR(
50), CONSTRAINT pk_nid PRIMARY KEY(nid) )engine="innodb";

相同點

  • 任何資料庫如果要應用到程式之中都需要使用到JDBC技術,而Oracle和MySQL的jdbc操作流程基本一樣.
  • MySQL在Java程式中的jdbc操作
package mao.shu.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class MySQLJDBC {
	//定義mysql資料庫的載入程式類
	private static final String DRIVER_MYSQL="org.gjt.mm.mysql.Driver";
	//定義jdbc的連線地址
	private static final String DBURL_MYSQL="jdbc:mysql://localhost:3306/mldn";
	//定義mysql資料庫的使用者名稱
	private static final String USER = "root";
	//定義連線使用者的密碼
	private static final String PASSWORD="mysqladmin";
	public static void main(String args[])throws Exception{
		//載入資料庫驅動程式類
		Class.forName(DRIVER_MYSQL);
		//通過DriverManager類得到資料庫連線物件
		Connection conn = DriverManager.getConnection(DBURL_MYSQL, USER, PASSWORD);
		
		//定義sql查詢語句
		String sql ="SELECT nid,price,title FROM news LIMIT ?,?";
		PreparedStatement psd = conn.prepareStatement(sql);
		Long currentPage = 1L;
		Long linesize = 5L;
		psd.setLong(1, (currentPage-1)*linesize);
		psd.setLong(2, linesize);
		ResultSet rest = psd.executeQuery();
		while(rest.next()){
			System.out.println(rest.getLong(1)+"     "+rest.getDouble(2)+"      "+rest.getString(3));
		}
		//關閉資料庫連線
		conn.close();
	}
}

在這裡插入圖片描述

  • 示例:Oracle的jdbc操作
package mao.shu.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;


public class OracleLJDBC {
	//定義oracle資料庫的載入程式類
	private static final String DRIVER_ORACLE="oracle.jdbc.driver.OracleDriver";
	//定義jdbc的連線地址
	private static final String DBURL_ORACLE="jdbc:oracle:thin:@localhost:1521:mldn";
	//定義oracle資料庫的使用者名稱
	private static final String USER = "scott";
	//定義連線使用者的密碼
	private static final String PASSWORD="tiger";
	public static void main(String args[])throws Exception{   
		//載入資料庫驅動程式類  
		Class.forName(DRIVER_ORACLE);
		//通過DriverManager類得到資料庫連線物件
		Connection conn = DriverManager.getConnection(DBURL_ORACLE, USER, PASSWORD);
		
		//定義sql查詢語句
		String sql =" SELECT empno,ename,job "
					+" FROM( "
					+" SELECT empno,ename,job,ROWNUM rn FROM emp WHERE ROWNUM <= ? "
					+" )temp "
					+"WHERE temp.rn > ?";
		PreparedStatement psd = conn.prepareStatement(sql);
		int currentPage = 1;
		int linesize = 5;
		psd.setInt(1, currentPage*linesize);
		psd.setInt(2, (currentPage-1)*linesize);
		ResultSet rest = psd.executeQuery();
		while(rest.next()){
			System.out.println(rest.getInt(1)+"     "+rest.getString(2)+"      "+rest.getString(3));
		}
		//關閉資料庫連線
		conn.close();
	}
}

在這裡插入圖片描述

  • 可以發現兩個資料庫的jdbc操作中除了基本資訊外(驅動程式類,連線路徑,使用者名稱,密碼,sql語句)之外,操作流程都是一樣的,這也就是標準的好處.