Oracle

2020-10-27 15:01:28


優點:資料量,讀寫速度,安全,穩定
缺點:對Windows支援不友好

安裝

安裝成功後設定
在這裡插入圖片描述
檢測
oracle 自帶使用者
超級管理員
在這裡插入圖片描述

普通管理員
在這裡插入圖片描述

Oracle的資料型別

1、數值型別

	NUMBER:可以表示整數,也可以表示小數
	NUMBER(P,S):表示有效位數為P位,小數位數為S位
	NUMBER(P):表示一個P位整數

2、字元型別

	VARCHAR2:可變長度的字串(裝不下,可自動擴充套件)
	CHAR:表示指定長度的字串 
	LONG:表示一個可變的字串,任何字串變數都可以賦值給它(純資料開發用到)
	NCHAR和NVARCHAR2:根據字元集確定

3、日期型別

	DATE:包含年月日時分秒
	TIMESTAMP:時間戳,包含年月日和時分秒毫秒

4、布林型別

	BOOLEAN:TRUE,FALSE,NULL

5、檔案型別(不建議資料庫內上傳檔案)

	BLOB:二進位制資料,可以是圖片、音訊、視訊...

PLSQL Developer

	字型調整:工具->偏好設定
	表空間 tablespace:儲存在本地計算機硬碟上

1、建立一個新的使用者

檔案->新建->Command Window

create user lv identified by orcl123;

2、為已建立的使用者授權

授予最大的許可權(授權必須要用sys賬戶)

grant dba to lv;

3、建立一個表空間

create tablespace lv datafile 'E:\lv.dbf'size 200m 
autoextend on next 10m maxsize unlimited;
	datafile:表空間的資料檔案存放路徑
	size:設定初始大小為200M
	autoextend:on/off 表示啟動/停止自動擴充套件空間
	next 10M:表空間滿了,自動擴充套件10M
	maxsize unlimited:無限制擴充套件              

4、為當前使用者指定表空間

alter user lv default tablespace lv;

5、修改當前字元集為簡體中文

alter session set nls_language = 'SIMPLIFIED CHINESE';

6、建立表

create table person(
     name varchar2(10),
     gender char(2),
     age number(3),
     birthday date,
     sal number(7,2)  
);

7、檢視表結構

desc person

8、插入資料(預設不會自動提交事物)

insert into person values('張三''男'20,'7-6月-1990',5000);

9、提交事物

commit;

10、匯入檔案

@檔案路徑 檔名

11、查詢資料

select name from person where birthday = '7-6月-1990';
// to_char 日期函數(查詢時儘量使用)
select name from person where to_char(birthday,'yyyy-mm-dd') = '1990-06-07';

與mysql比較

mysql 是以資料庫為單位的
oracle 是以使用者未單位的

oracl對字元大小寫敏感

主鍵策略

mysql主鍵是int型別,自動遞增

Oracle資料庫沒有主鍵自動遞增(沒有這個功能)
序列:是oracle提供的用於產生一系列唯一數位的資料庫物件。主要用於提供主鍵值,一般在插入時使用

建立序列

create sequence seq_person start with 100 increment by 1;

插入資料

insert into person(id,name,gender,age,sal)
values(
       SEQ_PERSON.NEXTVAL,'王五','女'182000
);

偽列與偽表:

偽表:dual,用於計算或進行函數的測試(大多數用於PL/SQL程式設計)

select 1 + 2 from dual;
select sysdate,to_char(sysdate,'yyyy-mm-dd HH24:mm:ss')from dual;

偽列:
ROWID:是一種資料型別,唯一標識一條記錄物理位置的一個id,一般用不到,絕對不會重複。
ROWNUM:查詢結果自增編號

select person.*,rownum from person

分頁查詢

Oracle分頁查詢(子迴圈,巢狀查詢):

select *from person where rownum <= 3;

select t2.* from
(select t1.*,rownum as rn from employees t1 where 1=1 and rownum <= 當前頁*每頁顯示的記錄數)t2
where t2.rn > (當前頁-1)*每頁顯示的記錄數;

Mysql分頁查詢:

select * from person limit ((當前頁-1)*每頁顯示的記錄數 + 1),每頁顯示的記錄數;
select *from person limit 1,3;

主鍵裂縫(主鍵永遠不會重複)解決方法

oracal rownumber
jstl標籤庫(c:foreach)
jquery 遍歷for迴圈

Oracle JDBC

public class JDBCOracleTest {
	
	public static void main(String[] args) {
		
		Connection conn = null;
		Statement stmt = null;
		
		try {
			//com.mysql.jdbc.Driver
			Class.forName("oracle.jdbc.driver.OracleDriver");
			//jdbc:mysql://localhost:3306/資料庫名
			conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl","lv","orcl123");
			if(conn != null) {
				System.out.println("oracle連線成功...");
			}
			String sql = "insert into person(id,name,gender,age,birthday,sal)"
					+ "values(seq_person.nextval,'趙六','女',25,'24/10月/2000',3000)";
			stmt = conn.createStatement();
			stmt.executeUpdate(sql);
			System.out.println("資料插入成功...");
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			if(stmt != null) {
				try {
					stmt.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if(conn != null) {
				try {
					conn.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
		
	}
}