關于數據庫基礎知識?數據庫是程序員在學習後端編程開發技術的時候需要重點掌握的一個編程能力,而今天我們就一起來了解一下,數據庫的基礎知識都有哪些,下面我們就來聊聊關于關于數據庫基礎知識?接下來我們就一起去了解一下吧!
數據庫是程序員在學習後端編程開發技術的時候需要重點掌握的一個編程能力,而今天我們就一起來了解一下,數據庫的基礎知識都有哪些。
1、基本sql語句
select * from table where 條件
insert int table (字段) values (值)
update table set 字段名=字段值 where 條件
delete from table where 條件
create table tablename (字段)
drop table tablename
grant(為用戶授予系統權限)
revoke(收回系統權限)
2、delete、truncate、drop的區别
同:delete和truncate都可以删除一個表中的數據,而drop是直接删除這個表(包括結構和數據)。
不同:a、truncate和drop是DDL(數據定義語言),它會被隐式的提交,一旦執行将不能回滾。delete操作則是每次從表中删除一行數據,同時将删除的操作以日志的形式保存,以便将來回滾操作。
b、用delete操作後,被删除的數據占用的内存空間還在,還可以恢複。而用truncate和drop操作删除數據以後,被删除的數據會立即釋放占用的存儲空間,被删除的數據不能恢複。
c、速度drop > truncate > delete
3、内連接和外連接的區别
内連接隻顯示符合連接條件的記錄,可能造成信息丢失
外連接除了顯示符合連接條件的記錄外,還顯示表中的記錄
select fieldlist from table1 inner join table2 on table1.column = table2.column
4、什麼是事務,什麼是ACID
事務是指滿足ACID特性的一組操作,可以通過commit提交一個事務,也可以通過rollback進行回滾。
A-原子性-事務是一個不可分割的整體
C-一緻性-一個事務執行前後,數據庫數據必須保持一緻性的狀态
I-隔離性-一個事務所做的修改在終提交以前,對其他事務是不可見的
D-持久性-一旦事務提交,其所做的修改将會永遠保存到數據庫。及時系統崩潰,事務執行的結果也不能丢失。
5、什麼是存儲過程
将為了完成特定功能的SQL語句集進行編譯優化後,存儲在數據庫服務器中,用戶通過指定存儲過程的名字調用執行。
其實存儲過程就是對一系列SQL操作的批處理
每次隻能給一個變量賦值,不支持集合的操作
好處:代碼封裝,保證安全性/代碼複用/預先編譯,因此性能高
6、并發一緻性問題(針對事務的隔離性)
丢失修改-T1先修改,T2随後修改,T2的修改覆蓋了T1的修改。
讀髒數據-T1修改一個數據,T2随後讀取這個數據。如果T1撤銷了這次修改,那麼T2讀取的數據是髒數據。
不可重複讀-T2讀取一個數據,T1對該數據做修改。如果T2再次讀這個數據,此時讀取的結果和一次讀取的結果不同。
幻讀-T1讀取某個範圍的數據,T2在這個範圍内插入新的數據,T1再次讀取這個範圍的數據,此時讀取的結果和一次讀 取的結果不同。
7、封鎖實現并發控制
封鎖粒度-行級鎖和表級鎖
封鎖類型-a、讀寫鎖
排它鎖--寫鎖--X鎖
共享鎖--讀鎖--S鎖
b、意向鎖
解決表鎖與之前可能存在的行鎖沖突,避免為了判斷表是否存在行鎖而去掃描全表的系統消耗。
意向鎖在原來X/S鎖上引入了IX/IS,IX/IS是表鎖,用來表示一個事務想要在表中的某個數據行上加X/S鎖。
數據庫判斷沖突:原來 step1:判斷表是否已被其他事務用表鎖鎖表
step2:判斷表中的每一行是否已被行鎖鎖住。
現在 step1:同上 step2:發現表上有意向共享鎖,說明表中有些行被共享行鎖鎖 住了,因此,事務B申請表的寫鎖會被阻塞。
封鎖協議-一級封鎖協議--事務T要修改數據A時必須加X鎖,直到T結束才釋放鎖。
二級封鎖協議--在一級的基礎上,要求讀取數據A時必須加S鎖,讀取完馬上釋放S鎖。
三級封鎖協議--在二級的基礎上,要求讀取數據A時必須加S鎖,直到事務結束了才能釋放S鎖。
兩段鎖協議-加鎖和解鎖分為兩個階段執行
MySQL的InnoDB存儲引擎采用兩段鎖協議,會根據隔離級别在需要的時候自動加鎖,并且所有的鎖都是在同 一時刻被釋放,這被稱為隐式鎖定。
8、事務隔離級别實現并發一緻性問題
未提交讀--事務中的修改,即使沒有提交,對其它事務也是可見的。
提交讀--一個事務隻能讀取已經提交的事務所做的修改。
可重複讀--保證在同一個事務中多次讀取同樣數據的結果是一樣的。
可串行化--強制事務串行執行,需要加鎖實現,而其它隔離級别通常不需要。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!