MySQL面試專題

  1. 數據庫三範式是什麼?
    第一範式(1NF):字段具有原子性,不可再分。(所有關係型數據庫系統都滿足第一範式數據庫表中的字段都是單一屬性的,不可再分)
    第二範式(2NF)是在第一範式(1NF)的基礎上建立起來的,即滿足第二範式(2NF)必須先滿足第一範式(1NF)。要求數據庫表中的每個實例或行必須可以被惟一地區分。通常需要爲表加上一個列,以存儲各個實例的惟一標識。這個惟一屬性列被稱爲主關鍵字或主鍵。
    滿足第三範式(3NF)必須先滿足第二範式(2NF)。簡而言之,第三範式(3NF)要求一個數據庫表中不包含已在其它表中已包含的非主關鍵字信息。 >所以第三範式具有如下特徵:
  • 每一列只有一個值
  • 每一行都能區分。
  • 每一個表都不包含其他表已經包含的非主關鍵字信息。
  1. 有哪些數據庫優化方面的經驗?
    用PreparedStatement, 一般來說比Statement性能高:一個sql 發給服務器去執行,涉及步驟:語法檢查、語義分析, 編譯,緩存。
    有外鍵約束會影響插入和刪除性能,如果程序能夠保證數據的完整性,那在設計數據庫時就去掉外鍵。
    表中允許適當冗餘,譬如,主題帖的回覆數量和最後回覆時間等
    UNION ALL 要比UNION快很多,所以,如果可以確認合併的兩個結果集中不包含重複數據且不需要排序時的話,那麼就使用UNION ALL。 >>UNION和UNION ALL關鍵字都是將兩個結果集合併爲一個,但這兩者從使用和效率上來說都有所不同。 >1. 對重複結果的處理:UNION在進行錶鏈接後會篩選掉重複的記錄,Union All不會去除重複記錄。 >2. 對排序的處理:Union將會按照字段的順序進行排序;UNION ALL只是簡單的將兩個結果合併後就返回。
  2. 請簡述常用的索引有哪些種類?
    普通索引: 即針對數據庫表創建索引
    唯一索引: 與普通索引類似,不同的就是:MySQL數據庫索引列的值必須唯一,但允許有空值
    主鍵索引: 它是一種特殊的唯一索引,不允許有空值。一般是在建表的時候同時創建主鍵索引
    組合索引: 爲了進一步榨取MySQL的效率,就要考慮建立組合索引。即將數據庫表中的多個字段聯合起來作爲一個組合索引。
  3. 以及在mysql數據庫中索引的工作機制是什麼?
    數據庫索引,是數據庫管理系統中一個排序的數據結構,以協助快速查詢、更新數據庫表中數據。索引的實現通常使用B樹及其變種B+樹
  4. MySQL的基礎操作命令:
    MySQL 是否處於運行狀態:Debian 上運行命令 service mysql status,在RedHat 上運行命令 service mysqld status
    開啓或停止 MySQL 服務 :運行命令 service mysqld start 開啓服務;運行命令 service mysqld stop 停止服務
    Shell 登入 MySQL: 運行命令 mysql -u root -p
    列出所有數據庫:運行命令 show databases;
    切換到某個數據庫並在上面工作:運行命令 use databasename; 進入名爲 databasename 的數據庫
    列出某個數據庫內所有表: show tables;
    獲取表內所有 Field 對象的名稱和類型 :describe table_name;
  5. mysql的複製原理以及流程。
    Mysql內建的複製功能是構建大型,高性能應用程序的基礎。將Mysql的數據分佈到多個系統上去,這種分佈的機制,是通過將Mysql的某一臺主機的數據複製到其它主機(slaves)上,並重新執行一遍來實現的。 * 複製過程中一個服務器充當主服務器,而一個或多個其它服務器充當從服務器。主服務器將更新寫入二進制日誌文件,並維護文件的一個索引以跟蹤日誌循環。這些日誌可以記錄發送到從服務器的更新。 當一個從服務器連接主服務器時,它通知主服務器在日誌中讀取的最後一次成功更新的位置。從服務器接收從那時起發生的任何更新,然後封鎖並等待主服務器通知新的更新。 過程如下 1. 主服務器把更新記錄到二進制日誌文件中。 2. 從服務器把主服務器的二進制日誌拷貝到自己的中繼日誌(replay log)中。 3. 從服務器重做中繼日誌中的時間,把更新應用到自己的數據庫上。
  6. mysql支持的複製類型?
    基於語句的複製: 在主服務器上執行的SQL語句,在從服務器上執行同樣的語句。MySQL默認採用基於語句的複製,效率比較高。 一旦發現沒法精確複製時,會自動選着基於行的複製。
    基於行的複製:把改變的內容複製過去,而不是把命令在從服務器上執行一遍. 從mysql5.0開始支持
    混合類型的複製: 默認採用基於語句的複製,一旦發現基於語句的無法精確的複製時,就會採用基於行的複製。
  7. mysql中myisam與innodb的區別?
    事務支持 > MyISAM:強調的是性能,每次查詢具有原子性,其執行數度比InnoDB類型更快,但是不提供事務支持。 > InnoDB:提供事務支持事務,外部鍵等高級數據庫功能。 具有事務(commit)、回滾(rollback)和崩潰修復能力(crash recovery capabilities)的事務安全(transaction-safe (ACID compliant))型表。
    InnoDB支持行級鎖,而MyISAM支持表級鎖. >> 用戶在操作myisam表時,select,update,delete,insert語句都會給表自動加鎖,如果加鎖以後的表滿足insert併發的情況下,可以在表的尾部插入新的數據。
    InnoDB支持MVCC, 而MyISAM不支持
    InnoDB支持外鍵,而MyISAM不支持
    表主鍵 > MyISAM:允許沒有任何索引和主鍵的表存在,索引都是保存行的地址。 > InnoDB:如果沒有設定主鍵或者非空唯一索引,就會自動生成一個6字節的主鍵(用戶不可見),數據是主索引的一部分,附加索引保存的是主索引的值。
    InnoDB不支持全文索引,而MyISAM支持。
    可移植性、備份及恢復 > MyISAM:數據是以文件的形式存儲,所以在跨平臺的數據轉移中會很方便。在備份和恢復時可單獨針對某個表進行操作。 > InnoDB:免費的方案可以是拷貝數據文件、備份 binlog,或者用 mysqldump,在數據量達到幾十G的時候就相對痛苦了
    存儲結構 > MyISAM:每個MyISAM在磁盤上存儲成三個文件。第一個文件的名字以表的名字開始,擴展名指出文件類型。.frm文件存儲表定義。數據文件的擴展名爲.MYD (MYData)。索引文件的擴展名是.MYI (MYIndex)。 > InnoDB:所有的表都保存在同一個數據文件中(也可能是多個文件,或者是獨立的表空間文件),InnoDB表的大小隻受限於操作系統文件的大小,一般爲2GB。
  8. mysql中varchar與char的區別以及varchar(50)中的50代表的涵義?
    varchar與char的區別: char是一種固定長度的類型,varchar則是一種可變長度的類型.
    varchar(50)中50的涵義 : 最多存放50個字節
    int(20)中20的涵義: int(M)中的M indicates the maximum display width (最大顯示寬度)for integer types. The maximum legal display width is 255.
    碼巢JAVA進階
    想要獲取更多資料,就掃碼加入我們
    在這裏插入圖片描述