2021-PHP面試題“資料庫“相關知識點面試大全總結

MC811-MM118發表於2021-05-19

常見的關係型資料庫管理系統產品有?
答:Oracle、SQL Server、MySQL、Sybase、DB2、Access等。

SQL語言包括哪幾部分?每部分都有哪些操作關鍵字?
答:SQL語言包括資料定義(DDL)、資料操縱(DML),資料控制(DCL)和資料查詢(DQL)四個部分。
資料定義:Create Table,Alter Table,Drop Table, Craete/Drop Index等
資料操縱:Select ,insert,update,delete,
資料控制:grant,revoke
資料查詢:select

完整性約束包括哪些?
資料完整性(Data Integrity)是指資料的精確(Accuracy) 和 可靠性(Reliability)。
包括:
(1)實體完整性:規定表的每一行在表中是惟一的實體。
(2)域完整性:是指表中的列必須滿足某種特定的資料型別約束,其中約束又包括取值範圍、精度等規定。
(3)參照完整性:是指兩個表的主關鍵字和外關鍵字的資料應一致,保證了表之間的資料的一致性,防止了資料丟失或無意義的資料在資料庫中擴散。
(4) 使用者定義的完整性:不同的關聯式資料庫系統根據其應用環境的不同,往往還需要一些特殊的約束條件。使用者定義的完整性即是針對某個特定關聯式資料庫的約束條件,它反映某一具體應用必須滿足的語義要求。

什麼是事務?及其特性?
事務:是一系列的資料庫操作,是資料庫應用的基本邏輯單位。
特性:
(1)原子性:即不可分割性,事務要麼全部被執行,要麼就全部不被執行。
(2)一致性或可串性。事務的執行使得資料庫從一種正確狀態轉換成另一種正確狀態
(3)隔離性。在事務正確提交之前,不允許把該事務對資料的任何改變提供給任何其他事務,
(4) 永續性。事務正確提交後,其結果將永久儲存在資料庫中,即使在事務提交後有了其他故障,事務的處理結果也會得到儲存。
簡單理解:在事務裡的操作,要麼全部成功,要麼全部失敗。

什麼是鎖?
資料庫是一個多使用者使用的共享資源。當多個使用者併發地存取資料時,在資料庫中就會產生多個事務同時存取同一資料的情況。若對併發操作不加控制就可能會讀取和儲存不正確的資料,破壞資料庫的一致性。

加鎖是實現資料庫併發控制的一個非常重要的技術。當事務在對某個資料物件進行操作前,先向系統發出請求,對其加鎖。加鎖後事務就對該資料物件有了一定的控制,在該事務釋放鎖之前,其他的事務不能對此資料物件進行更新操作。
基本鎖型別:鎖包括行級鎖和表級鎖

什麼叫檢視?遊標是什麼?
檢視是一種虛擬的表,具有和物理表相同的功能。可以對檢視進行增,改,查,操作,檢視通常是有一個表或者多個表的行或列的子集。對檢視的修改不影響基本表。它使得我們獲取資料更容易,相比多表查詢。

遊標:是對查詢出來的結果集作為一個單元來有效的處理。遊標可以定在該單元中的特定行,從結果集的當前行檢索一行或多行。可以對結果集當前行做修改。一般不使用遊標,但是需要逐條處理資料的時候,遊標顯得十分重要。

什麼是儲存過程?用什麼來呼叫?
儲存過程是一個預編譯的SQL語句,優點是允許模組化的設計,就是說只需建立一次,以後在該程式中就可以呼叫多次。如果某次操作需要執行多次SQL,使用儲存過程比單純SQL語句執行要快。可以用一個命令物件來呼叫儲存過程。

索引的作用?和它的優點缺點是什麼?
索引就一種特殊的查詢表,資料庫的搜尋引擎可以利用它加速對資料的檢索。它很類似與現實生活中書的目錄,不需要查詢整本書內容就可以找到想要的資料。索引可以是唯一的,建立索引允許指定單個列或者是多個列。

缺點是它減慢了資料錄入的速度,同時也增加了資料庫的尺寸大小。

如何通俗地理解三個正規化?
第一正規化:1NF是對屬性的原子性約束,要求屬性具有原子性,不可再分解;
第二正規化:2NF是對記錄的惟一性約束,要求記錄有惟一標識,即實體的惟一性;
第三正規化:3NF是對欄位冗餘性的約束,即任何欄位不能由其他欄位派生出來,它要求欄位沒有冗餘。。

什麼是基本表?什麼是檢視?
基本表是本身獨立存在的表,在 SQL 中一個關係就對應一個表。
檢視是從一個或幾個基本表匯出的表。檢視本身不獨立儲存在資料庫中,是一個虛表
試述檢視的優點?
(1) 檢視能夠簡化使用者的操作
(2) 檢視使使用者能以多種角度看待同一資料;
(3) 檢視為資料庫提供了一定程度的邏輯獨立性;
(4) 檢視能夠對機密資料提供安全保護。

NULL是什麼意思
NULL這個值表示UNKNOWN(未知):它不表示“”(空字串)。
對NULL這個值的任何比較都會生產一個NULL值。
您不能把任何值與一個 NULL值進行比較,並在邏輯上希望獲得一個答案。
使用IS NULL來進行NULL判斷

主鍵、外來鍵和索引的區別?
主鍵、外來鍵和索引的區別
定義:
主鍵–唯一標識一條記錄,不能有重複的,不允許為空
外來鍵–表的外來鍵是另一表的主鍵, 外來鍵可以有重複的, 可以是空值
索引–該欄位沒有重複值,但可以有一個空值
作用:
主鍵–用來保證資料完整性
外來鍵–用來和其他表建立聯絡用的
索引–是提高查詢排序的速度
個數:
主鍵–主鍵只能有一個
外來鍵–一個表可以有多個外來鍵
索引–一個表可以有多個唯一索引

你可以用什麼來確保表格裡的欄位只接受特定範圍裡的值?
Check限制,它在資料庫表格裡被定義,用來限制輸入該列的值。

說說對SQL語句優化有哪些方法?(選擇幾條)
(1)Where子句中:where表之間的連線必須寫在其他Where條件之前,那些可以過濾掉最大數量記錄的條件必須寫在Where子句的末尾.HAVING最後。
(2)用EXISTS替代IN、用NOT EXISTS替代NOT IN。
(3) 避免在索引列上使用計算
(4)避免在索引列上使用IS NULL和IS NOT NULL
(5)對查詢進行優化,應儘量避免全表掃描,首先應考慮在 where 及 order by 涉及的列上建立索引。
(6)應儘量避免在 where 子句中對欄位進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃描
(7)應儘量避免在 where 子句中對欄位進行表示式操作,這將導致引擎放棄使用索引而進行全表掃描

SQL語句中‘相關子查詢’與‘非相關子查詢’有什麼區別?
(1)非相關子查詢是獨立於外部查詢的子查詢,子查詢總共執行一次,執行完畢後將值傳遞給外部查詢。
(2)相關子查詢的執行依賴於外部查詢的資料,外部查詢執行一行,子查詢就執行一次。
因此非相關子查詢比相關子查詢效率高

char和varchar的區別?
char是一種固定長度的型別,varchar則是一種可變長度的型別。
區別:
char(M)型別的資料列裡,每個值都佔用M個位元組,如果某個長度小於M,MySQL就會在它的右邊用空格字元補足。(在檢索操作中那些填補出來的空格字元將被去掉)。
varchar(M)型別的資料列裡,每個值只佔用剛好夠用的位元組再加上一個用來記錄其長度的位元組(即總長度為L+1位元組)。

Mysql 的儲存引擎,myisam和innodb的區別。
MyISAM 是非事務的儲存引擎;適合用於頻繁查詢的應用;表鎖,不會出現死鎖;不支援事務。適合小資料,小併發
innodb是支援事務的儲存引擎;適合於插入和更新操作比較多的應用;設計合理的話是行鎖(最大區別就在鎖的級別上);適合大資料,大併發。

資料表型別有哪些
MyISAM、InnoDB、HEAP、BOB,ARCHIVE,CSV等。

MyISAM:成熟、穩定、易於管理,快速讀取。一些功能不支援(事務等),表級鎖。
InnoDB:支援事務、外來鍵等特性、資料行鎖定。空間佔用大,不支援全文索引等。

MySQL資料庫作釋出系統的儲存,一天五萬條以上的增量,預計運維三年,怎麼優化?
(1)設計良好的資料庫結構,允許部分資料冗餘,儘量避免join查詢,提高效率。
(2) 選擇合適的表欄位資料型別和儲存引擎,適當的新增索引。
(3) 做mysql主從複製讀寫分離。
(4)對資料表進行分表,減少單表中的資料量提高查詢速度。
(5)新增快取機制,比如redis,memcached等。
(6)對不經常改動的頁面,生成靜態頁面(比如做ob快取)。
(7)書寫高效率的SQL。比如 SELECT * FROM TABEL 改為 SELECT field_1, field_2, field_3 FROM TABLE.

對於大流量的網站,您採用什麼樣的方法來解決各頁面訪問量統計問題?
(1) 確認伺服器是否能支撐當前訪問量。
(2) 優化資料庫訪問。
(3)禁止外部訪問連結(盜鏈), 比如圖片盜鏈。
(4)控制檔案下載。
(5)做負載均衡,使用不同主機分流。
(6)使用瀏覽統計軟體,瞭解訪問量,有針對性的進行優化。

本作品採用《CC 協議》,轉載必須註明作者和本文連結
如果覺得我寫的不錯,記得和我交流,其實我也有很多不懂,嘻嘻!

相關文章