資料庫知識點

2022-05-09 05:51:14 字數 3204 閱讀 6053

面試用,**:

a:原子性:原子性是指事務包含的所有操作要麼全部成功,要麼全部失敗回滾,因此事務的操作如果成功就必須要完全應用到資料庫,如果操作失敗則不能對資料庫有任何影響。

c:一致性:一致性是指事務必須使資料庫從乙個一致性狀態變換到另乙個一致性狀態,也就是說乙個事務執行之前和執行之後都必須處於一致性狀態。拿轉賬來說,假設使用者a和使用者b兩者的錢加起來一共是5000,那麼不管a和b之間如何轉賬,轉幾次賬,事務結束後兩個使用者的錢相加起來應該還得是5000,這就是事務的一致性。

i:隔離性:是當多個使用者併發訪問資料庫時,比如操作同一張表時,資料庫為每乙個使用者開啟的事務,不能被其他事務的操作所干擾,多個併發事務之間要相互隔離。即要達到這麼一種效果:對於任意兩個併發的事務t1和t2,在事務t1看來,t2要麼在t1開始之前就已經結束,要麼在t1結束之後才開始,這樣每個事務都感覺不到有其他事務在併發地執行。

d:永續性:是指乙個事務一旦被提交了,那麼對資料庫中的資料的改變就是永久性的,即便是在資料庫系統遇到故障的情況下也不會丟失提交事務的操作。例如我們在使用jdbc運算元據庫時,在提交事務方法後,提示使用者事務操作完成,當我們程式執行完成直到看到提示後,就可以認定事務以及正確提交,即使這時候資料庫出現了問題,也必須要將我們的事務完全執行完成,否則就會造成我們看到提示事務處理完畢,但是資料庫因為故障而沒有執行事務的重大錯誤。

1.髒讀:

髒讀是指在乙個事務處理過程裡讀取了另乙個未提交的事務中的資料。

當乙個事務正在多次修改某個資料,而在這個事務中這多次的修改都還未提交,這時乙個併發的事務來訪問該資料,就會造成兩個事務得到的資料不一致。例如:使用者a向使用者b轉賬100元,對應sql命令如下

update account set money=money+100 where name=』b』;  (此時a通知b)

update account set money=money - 100 where name=』a』;

2.不可重複讀:不可重複讀是指在對於資料庫中的某個資料,乙個事務範圍內多次查詢卻返回了不同的資料值,這是由於在查詢間隔,被另乙個事務修改並提交了。

例如事務t1在讀取某一資料,而事務t2立馬修改了這個資料並且提交事務給資料庫,事務t1再次讀取該資料就得到了不同的結果,傳送了不可重複讀。

不可重複讀和髒讀的區別是,髒讀是某一事務讀取了另乙個事務未提交的髒資料,而不可重複讀則是讀取了前一事務提交的資料。

在某些情況下,不可重複讀並不是問題,比如我們多次查詢某個資料當然以最後查詢得到的結果為主。但在另一些情況下就有可能發生問題,例如對於同乙個資料a和b依次查詢就可能不同,a和b就可能打起來了……

3.虛讀:

幻讀是事務非獨立執行時發生的一種現象。例如事務t1對乙個表中所有的行的某個資料項做了從「1」修改為「2」的操作,這時事務t2又對這個表中插入了一行資料項,而這個資料項的數值還是為「1」並且提交給資料庫。而操作事務t1的使用者如果再檢視剛剛修改的資料,會發現還有一行沒有修改,其實這行是從事務t2中新增的,就好像產生幻覺一樣,這就是發生了幻讀。

幻讀和不可重複讀都是讀取了另一條已經提交的事務(這點就髒讀不同),所不同的是不可重複讀查詢的都是同乙個資料項,而幻讀針對的是一批資料整體(比如資料的個數)。

mysql資料庫為我們提供的四種隔離級別

① serializable (序列化):可避免髒讀、不可重複讀、幻讀的發生。

② repeatable read (可重複讀):可避免髒讀、不可重複讀的發生。

③ read committed (讀已提交):可避免髒讀的發生。

④ read uncommitted (讀未提交):最低級別,任何情況都無法保證。

/感覺這個考到的可能性不大,

在實際應用中觸發器主要是進行建立約束及級聯更新。主要是dml觸發器,在select,update,delete這些語句被執行的時候。

//感覺沒有什麼好寫的,都是一些很平常的東西,主要就是sql怎麼寫吧。

給出了幾個例子:在插入一行時有約束條件;在更改時進行級聯更改。

唯一、不為空、經常被查詢的字段應該作為索引。

索引相當於目錄,加快查詢的速度,可以對一列或者多列建立索引,

索引是使用b+樹來實現的。

下面來介紹一下b+樹來加深理解:

b+樹中非葉節點包括資料項和指標,非葉節點的資料項並儲存資料,只是用來索引,真正的資料存在於葉節點當中。每乙個節點代表乙個磁碟塊。

與sql語句執行相關。是操作的基本單位,可以由一條或者多條sql語句組成。有acid特性。

鎖就是為了保證事務的完整性和併發性

共享鎖和排他鎖。讀取的時候新增共享鎖,要修改資料的時候會新增排他鎖。

可能會產生死鎖,當兩個事務都對乙個表加共享鎖,並且都想公升級為排他鎖的時候,會互相等待對方釋放共享鎖,從而導致死鎖。

①是sql語句的查詢結果,具有表的結構,但是不實現儲存;

②字段來自資料庫中一張表或者多張表;資料保持和資料庫中的一致。

對單錶檢視一般用於查詢和修改;對多表檢視一般就查詢,很難修改;

作用:①對經常使用的資料定義為檢視

②為了資料的安全性,使用者只能查詢和更改可以看到的資料

**:2nf:要求表中所有列必須依賴於主鍵,也就是說一張表只能描述一件事情。比如同一張表中同時出現產品資訊和訂單資訊(存在部分函式依賴),而應該拆分為兩個表。

所有非關鍵字段都完全依賴於任意一組候選關鍵字。也就是不存在非關鍵字被部分候選關鍵字所決定。(這個部分修飾的是關鍵字)

3nf:表中的每一列都直接與主鍵相關,而不能是間接相關,用外來鍵做表的關聯(不存在非關鍵字對關鍵字的傳遞依賴。比如訂單表中要儲存客戶id,那麼客戶姓名不能存進來,因為客戶姓名是依賴於客戶id,而不是訂單id。

bcnf:比如(倉庫名,管理員名,物品名,數量)(3nf)這裡倉庫名函式依賴於(管理員名和物品名),主屬性對碼的部分函式依賴,所以應該將表拆分。

關係模式的兩個屬性子集x和y,如果x能夠唯一確定y的值,那麼就是y函式依賴於x。

9.

資料庫知識點

1.truncate delete和drop delete delete是一行行刪除資料,不影響表結構,並且會記錄日誌,可以進行回滾。truncate 刪除表中所有資料,不記錄日誌,不可以回滾,truncate之後表空間和索引大小會回到初始值。所以truncate之前最好備份 drop 刪除整個表結...

資料庫知識點

資料庫的事務,是指作為單個邏輯工作單元執行的一系列操作。事務處理可以確保除非事務性單元內的所有操作都成功完成,否則不會永久更新面向資料的資源。通過將一組相關操作組合為乙個要麼全部成功要麼全部失敗的單元,可以簡化錯誤恢復並使應用程式更加可靠。乙個邏輯工作單元要成為事務,必須滿足所謂的acid 原子性 ...

資料庫知識點

oracle 安裝oracle時需要的所需的軟體包安裝命令 yum install binutils compat libcap1 gcc glibc ksh libaio libgcc libstdc libxi libxtst make sysstat 1 建使用者create user ora...