首頁  >  文章  >  後端開發  >  總結PHP面試題「資料庫」相關知識

總結PHP面試題「資料庫」相關知識

藏色散人
藏色散人轉載
2021-05-19 13:47:548224瀏覽

這篇文章為大家總結PHP面試題「資料庫「相關知識 。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有幫助。

常見的關聯式資料庫管理系統中擁有?
答案: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)使用瀏覽統計軟體,了解訪問量,有針對性的進行最佳化。          

#建議:「PHP 試題大總表(合集)」                

#

以上是總結PHP面試題「資料庫」相關知識的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:learnku.com。如有侵權,請聯絡admin@php.cn刪除