數(shù)據(jù)庫(kù)幾個(gè)面試題

1.什么樣的場(chǎng)景會(huì)產(chǎn)生數(shù)據(jù)庫(kù)死鎖税弃,如何解決?

第一條:事務(wù)之間對(duì)資源訪問順序的交替
簡(jiǎn)單說就是凑队,
用戶1訪問A表则果,用戶2訪問B表。
然后1還要訪問B漩氨,2還要訪問A西壮。
但是1鎖住了A,2鎖住了B叫惊。
死鎖了茸时。
解決辦法:
調(diào)整程序的邏輯,一般操作多張表的話赋访,避免這樣交替順序的表操作可都。

第二條:并發(fā)修改同一記錄
用戶1和用戶2都要對(duì)一條記錄修改。
先讀取記錄蚓耽,獲取共享鎖渠牲。這時(shí)候兩個(gè)事務(wù)獲得了共享模式鎖。
然后試圖修改步悠,共享鎖要轉(zhuǎn)換為排他鎖签杈,
因?yàn)橐粋€(gè)事務(wù)的排他鎖和其他事務(wù)的共享鎖是不兼容的。即:要等待其他事務(wù)釋放共享鎖。
所以這時(shí)候發(fā)生鎖等待答姥,兩個(gè)事務(wù)都在等待另一個(gè)事務(wù)釋放共享鎖铣除,發(fā)生死鎖。
解決辦法:
a.樂觀鎖鹦付。
b.悲觀鎖尚粘。
c.sqlserver的更新鎖。

第三條:索引不當(dāng)導(dǎo)致全表掃描
事務(wù)在執(zhí)行一條不滿足條件的語(yǔ)句敲长,執(zhí)行全表掃描郎嫁,行級(jí)鎖上升為表級(jí)鎖。
多個(gè)事務(wù)執(zhí)行后祈噪,容易發(fā)生阻塞和死鎖泽铛。
數(shù)據(jù)量大,索引少的時(shí)候辑鲤。應(yīng)用系統(tǒng)變慢盔腔,阻塞發(fā)生死鎖。

sql語(yǔ)句不要使用太復(fù)雜的關(guān)聯(lián)多表查詢月褥,建立相關(guān)索引優(yōu)化弛随。

2.sql如何優(yōu)化

第一條:還是索引問題

索引建立時(shí)需要注意的地方
避免對(duì)索引字段(
計(jì)算
使用not,<>,!=
使用is null 和 is not null
出現(xiàn)數(shù)據(jù)類型轉(zhuǎn)化
使用函數(shù)
使用空值(控制可以用默認(rèn)值代替)

說簡(jiǎn)單點(diǎn)就是索引要建的合適,如果索引是數(shù)字(日期也是)的話吓坚,不要以字符格式聲明數(shù)字,因?yàn)闀?huì)使索引無效灯荧,產(chǎn)生全表掃描礁击。

order by 和 where 后面經(jīng)常寫的字段,如果也滿足規(guī)則逗载,最好索引哆窿。

并不是所有索引對(duì)查詢都有效,如果一個(gè)索引有大量重復(fù)數(shù)據(jù)時(shí)厉斟,sql可能不會(huì)利用索引挚躯,比如說性別。

索引不是說越多越好擦秽,索引提高了select效率码荔,降低了insert和update效率。因?yàn)閕nsert和update可能重建索引感挥。一個(gè)表索引最好不要超過6個(gè)缩搅。

能使用數(shù)字類型字段就不要用字符型。字符型會(huì)一個(gè)一個(gè)字符比較触幼,數(shù)字型只需要比較一次硼瓣。

第二條:多個(gè)update就寫成一個(gè)好了

第三條:用 exist 和 not exist 替換 in 和 not in,
如果是連續(xù)數(shù)字也可以用between

第四條:不要寫select * 置谦,要把字段寫全了

第五條:distinct堂鲤,union亿傅,minus,intersect瘟栖,order by
需要啟動(dòng)sql引擎葵擎,distinct需要一次排序,其他兩次慢宗。

第六條:在一種情況下可以避免使用or坪蚁,在or的字段是索引時(shí),寧愿查詢兩次镜沽。
例子:

select id from t where num=10 or num=20;
可以這樣查詢
select id from t where num=10;
select id from t where num=20;

第七條:海量數(shù)據(jù)查詢避免格式轉(zhuǎn)換

第八條:盡可能使用更小的數(shù)據(jù)類型敏晤,比如mediumint 代替 int

第九條:盡可能使用enum

————————————————

3.oracle 和 mysql 使用分頁(yè)

oracle:
oracle使用rownum實(shí)現(xiàn)。

rownum沒有>,>= 因?yàn)閛racle行式數(shù)據(jù)庫(kù)
所以缅茉,如果分頁(yè)的數(shù)據(jù)不需要排序可以直接

 select * from (
    select rownum rn,a.* from student a where rownum <= 8
 ) where rn >= 5

如果需要先排序就是這樣

 select * from (
    select rownum rn,a.* from (
        select b.* from student b order by studentId asc
    ) a where rownum <= 8 
 ) where rn >= 5

mysql:
mysql使用limit實(shí)現(xiàn)嘴脾。

select * from student limit n,m;

n:(currentPage-1)*pageSize
m:pageSize

——————————————————————

4.唯一索引能否插入空

mysql:

唯一索引允許插入空,
創(chuàng)建唯一索引sql舉例:

CREATE UNIQUE INDEX index_name
ON table_name(index_column_1,index_column_2,...);

ALTER TABLE table_name
ADD CONSTRAINT constraint_name UNIQUE KEY(column_1,column_2,...);

CREATE TABLE table_name(
...
   UNIQUE KEY(index_column_,index_column_2,...) 
);
5.SQL怎樣判斷字段是否為空

sqlserver用isnull函數(shù)
oracle用nvl函數(shù)
mysql用ifnull函數(shù)或者coalesce函數(shù)
(如果字段是null就轉(zhuǎn)化成字段后面的內(nèi)容)

select * from student where colesce(student_name,'')<>'';
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蔬墩,一起剝皮案震驚了整個(gè)濱河市译打,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌拇颅,老刑警劉巖奏司,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異樟插,居然都是意外死亡韵洋,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門黄锤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來搪缨,“玉大人,你說我怎么就攤上這事鸵熟「北啵” “怎么了?”我有些...
    開封第一講書人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵流强,是天一觀的道長(zhǎng)痹届。 經(jīng)常有香客問我,道長(zhǎng)打月,這世上最難降的妖魔是什么短纵? 我笑而不...
    開封第一講書人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮僵控,結(jié)果婚禮上香到,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好悠就,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開白布千绪。 她就那樣靜靜地躺著,像睡著了一般梗脾。 火紅的嫁衣襯著肌膚如雪荸型。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,071評(píng)論 1 285
  • 那天炸茧,我揣著相機(jī)與錄音瑞妇,去河邊找鬼。 笑死梭冠,一個(gè)胖子當(dāng)著我的面吹牛辕狰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播控漠,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼蔓倍,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了盐捷?” 一聲冷哼從身側(cè)響起偶翅,我...
    開封第一講書人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎碉渡,沒想到半個(gè)月后聚谁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡滞诺,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年形导,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片铭段。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡骤宣,死狀恐怖秦爆,靈堂內(nèi)的尸體忽然破棺而出序愚,到底是詐尸還是另有隱情,我是刑警寧澤等限,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布爸吮,位于F島的核電站,受9級(jí)特大地震影響望门,放射性物質(zhì)發(fā)生泄漏形娇。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一筹误、第九天 我趴在偏房一處隱蔽的房頂上張望桐早。 院中可真熱鬧,春花似錦、人聲如沸哄酝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)陶衅。三九已至屡立,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間搀军,已是汗流浹背膨俐。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留罩句,地道東北人焚刺。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像的止,于是被迫代替她去往敵國(guó)和親檩坚。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 轉(zhuǎn) # https://www.cnblogs.com/easypass/archive/2010/12/ 08/...
    呂品?閱讀 9,698評(píng)論 0 44
  • 1.數(shù)據(jù)庫(kù)三范式是什么? 第一范式:表中每個(gè)字段都不能再分诅福。 第二范式:滿足第一范式并且表中的非主鍵字段都依賴于主...
    杰倫哎呦哎呦閱讀 2,854評(píng)論 0 28
  • MYSQL 基礎(chǔ)知識(shí) 1 MySQL數(shù)據(jù)庫(kù)概要 2 簡(jiǎn)單MySQL環(huán)境 3 數(shù)據(jù)的存儲(chǔ)和獲取 4 MySQL基本操...
    Kingtester閱讀 7,780評(píng)論 5 116
  • 12.7 姓名:韓艾辰 第98天 【學(xué)習(xí):20分鐘】 【冥想(靜定):15分鐘】 【三時(shí)書:0次】 【找到/服務(wù)老...
    韓艾辰閱讀 70評(píng)論 0 0
  • 下載地址 https://xdebug.org/download.php 如不確定版本匾委,可將phpinfo(),展...
    xuanxiao閱讀 1,030評(píng)論 0 0