面試題: mysql 數據庫未看9
總結的一些MySQL數據庫面試題
2016年06月16日 11:41:18 閱讀數:4950一、sql語句應該考慮哪些安全性?
(1)防止sql註入,對特殊字符進行轉義,過濾或者使用預編譯的sql語句綁定變量。
(2)最小權限原則,特別是不要用root賬戶,為不同的類型的動作或者組建使用不同的賬戶。
(3)當sql運行出錯時,不要把數據庫返回的錯誤信息全部顯示給用戶,以防止泄漏服務器和數據庫相關信息。
二、簡單描述MySQL中,索引,主鍵,唯一索引,聯合索引的區別,對數據庫的性能有什麽影響。
(1)索引是一種特殊的文件(InnoDB數據表上的索引是表空間的一個組成部分),它們包含著對數據表裏所有記錄的引用指針。
(2)普通索引(由關鍵字KEY或INDEX定義的索引)的唯一任務是加快對數據的訪問速度。
(3)普通索引允許被索引的數據列包含重復的值,如果能確定某個數據列只包含彼此各不相同的值,在為這個數據索引創建索引的時候就應該用關鍵字UNIQE把它定義為一個唯一所以,唯一索引可以保證數據記錄的唯一性。
(4)主鍵,一種特殊的唯一索引,在一張表中只能定義一個主鍵索引,逐漸用於唯一標識一條記錄,是用關鍵字PRIMARY KEY來創建。
(5)索引可以覆蓋多個數據列,如像INDEX索引,這就是聯合索引。
(6)索引可以極大的提高數據的查詢速度,但是會降低插入刪除更新表的速度,因為在執行這些寫操作時,還要操作索引文件。
三、一張表,裏面有ID自增主鍵,當insert了17條記錄之後,刪除了第15,16,17條記錄,再把Mysql重啟,再insert一條記錄,這條記錄的ID是18還是15 ?
(1)如果表的類型是MyISAM,那麽是18。
因為MyISAM表會把自增主鍵的最大ID記錄到數據文件裏,重啟MySQL自增主鍵的最大ID也不會丟失。
(2)如果表的類型是InnoDB,那麽是15。
InnoDB表只是把自增主鍵的最大ID記錄到內存中,所以重啟數據庫或者是對表進行OPTIMIZE操作,都會導致最大ID丟失。
四、請簡述項目中優化sql語句執行效率的方法,從哪些方面。sql語句性能如何分析?
(1)盡量選擇較小的列
(2)將where中用的比較頻繁的字段建立索引
(3)select子句中避免使用‘*’
(4)避免在索引列上使用計算,not,in和<>等操作
(5)當只需要一行數據的時候使用limit 1
(6)保證表單數據不超過200w,適時分割表
(7)針對查詢較慢的語句,可以使用explain來分析該語句具體的執行情況
五、mysql_fetch_row()和mysql_fetch_array()的區別
這兩個函數,返回的都是一個數組,區別就是第一個函數返回的數組是只包含值,我們只能row[0],row[1],這樣以數組下標來讀取數據,而mysql_fetch_array()返回的數組既包含第一種,也包含鍵值對的形式,我們可以這樣讀取數據,(假如數據庫的字段是 username,passwd):row[‘username‘],row[‘passwd‘。
面試題: mysql 數據庫未看9