資料庫和JDBC

2021-09-25 14:06:28 字數 3092 閱讀 8916

事務

事務是指作為單個邏輯工作單元執行的一組相關操作。這些操作要求全部完成或者全部不完成。使用事務是為了保證資料的安全有效。

事務有一下四個特點:(acid)

1、原子性(atomic):事務中所有資料的修改,要麼全部執行,要麼全部不執行。

2、一致性(consistence):事務完成時,要使所有所有的資料都保持一致的狀態,換言之:通過事務進行的所有資料修改,必須在所有相關的表中得到反映。

3、隔離性(isolation):事務應該在另乙個事務對資料的修改前或者修改後進行訪問。

4、永續性(durability):保證事務對資料庫的修改是持久有效的,即使發生系統故障,也不應該丟失。

當事務之間發生併發時有幾個隔離級別

隔離級別 髒讀 不可重複讀 幻讀

read uncommitted 是 是 是

read committed 否 是 是

repeatable(可重複讀) 否 否 是

serializable(序列讀) 否 否 否

oracle 預設的隔離級別是 read committed。

oracle 支援上述四種隔離級別中的兩種:read committed 和 serializable。除此之外,

oralce 中還定義 read only 和 read write 隔離級別。

read only:事務中不能有任何修改資料庫中資料的操作語句,是 serializable 的乙個子集。

read write:它是預設設定,該選項表示在事務中可以有訪問語句、修改語句,但不經常使用。

丟失更新:兩個事務同時儲存, 乙個儲存 100 , 乙個儲存 200,最終可能至儲存了200 或者 100,那另乙個的更新就沒成功,即結果不為預想的 300

髒讀:事務 t1 更新了一行資料,還沒有提交所做的修改,t2 讀取更新後的資料,t1回滾,t2 讀取的資料無效,這種資料稱為髒讀資料。

不可重複讀:事務 t1 讀取一行資料,t2 修改了 t1 剛剛讀取的記錄,t1 再次查詢,發現與第一次讀取的記錄不相同,稱為不可重複讀。

幻讀:事務 t1 讀取一條帶 where 條件的語句,返回結果集,t2 插入一條新紀錄,恰好也是 t1 的 where 條件,t1 再次查詢,結果集中又看到 t2 的記錄,新紀錄就叫做幻讀。

1、事務的開啟

自動開啟於 dml 之 insert delete update

2、事務的結束

成功 正常執行完成的 ddl 語句:create、alter、drop

 正常執行完 dcl 語句 grant、revoke

 正常退出的 sqlplus 或者 sql developer 等客戶端

 如果人工要使用隱式事務,set autocommit on (只針對乙個連線)

 手動提交 :使用 commit

失敗 rollback ,手動回滾

 非法退出 意外的斷電

rollback 只能對未提交的資料撤銷,已經 commit 的資料是無法撤銷的,因為 commit之後已經持久化到資料庫中。

二、dml

前面的 ddl(data definition language 資料定義語言)用於操作物件和物件的屬性,這種物件包括資料庫本身,以及資料庫物件,像:表、檢視等等,ddl 對這 些物件和屬性的管理和定義具體表現在 create、drop 和 alter 上。特別注意:ddl 操作的「物件」的概念,」物件「包括物件及物件的屬性,而且物件最小也比記錄大個層次。以表舉例:create 建立資料表,alter 可以更改該錶的字段,drop 可以刪除這個表,從這裡我們可以看到,ddl 所站的高度,他不會對具體的資料進行操作。

ddl 的主要語句(操作)

語句 作用

create 可以建立資料庫和資料庫的一些物件

drop 可以刪除資料表、索引、條件約束等

alter 修改資料表定義及屬性

dml(data manipulation language 資料操控語言)用於運算元據庫物件中包含的資料,也就是說操作的單位是記錄。

dml 的主要語句(操作)

語句 作用

insert 向資料表張插入一條記錄

delete 刪除資料表中的一條或多條記錄,也可以刪除資料表中的所有記錄,但是,它的操作物件仍是記錄

update 用於修改已存在表中的記錄的內容

使用場景:

insert 註冊

update 修改密碼

delete 退出、刪除、剔除會員

select 登入|檢視會員

1、insert

insert into 表名 [(字段列表)] values(值列表); 新增記錄

新增記錄時需要滿足一下條件

 型別 長度 相容: 字段 相容值

 值滿足約束 :主鍵 (唯一+非空) 非空(必填) 唯一(不重複 ) 預設(沒有填寫使用預設值) 檢查(滿足條件) 外來鍵(參考主表主鍵列的值)

 個數必須相同: 指定列,個數順序與列相同;沒有指定,個數與表結構的列個數和順序相同 (null也得佔位,沒有預設值)

新增資料

insert into 表名 values(和表結構順序和個數和型別一致的資料可以手寫也可以從別的表中獲取的);

insert into 表名(指定列名) values(和指定的列個數、順序、型別一致的列資料)

2、update

update 為修改資料

update 表名 set 字段=值 [,…] where 過濾行記錄;

要求: 記錄存在

 型別 長度 相容: 字段 相容值

 個數相同

更改資料

從已有表中查詢資料更改字段值:

update 表名 set(字段列表)=(select 字段列表 from 源表 where 過濾源表記錄 ) where 更新記錄的條件手動更改字段值:

update 表名 set 字段=值 [,…] where 過濾行記錄;

3、delete

delete 刪除資料

delete [from] 表名 where 過濾行記錄

說明:1、delete 可以刪除指定部分記錄,刪除全部記錄

2、記錄上存在主外來鍵關聯時, 刪除存在關聯的主表的記錄時,注意 參考外來鍵約束, 約束強制不讓刪除先刪除從表 再刪除主表

資料庫和JDBC

網上摘錄的,應該是跟jdbc驅動相關的 setfetchsize 是設定resultset每次向資料庫取的行數 但是你要這樣還是可以把所有的資料都取出來,這個只是優化了,取不完資料的情況下 預設時,驅動程式一次從查詢裡獲取所有的結果。這樣可能對於大的資料集來說是不方便的,因此 jdbc 驅動提供了乙...

JDBC 建立資料庫和表

1.註冊驅動 class.forname com.mysql.jdbc.driver 2.獲取連線 comepanydb此時只是作為乙個已有的資料庫防止語句出錯 string url jdbc mysql localhost 3306 comepanydb?usessl false characte...

Jdbc 鏈結資料庫

try rs.close ps.close conn.close try catch exception e if rs null if ps null if conn null catch sqlexception e console cpbm 09110444 資源已經釋放!ps is not ...