Mysql試題集錦

一、一張表,裏面有 ID 自增主鍵,當 insert 了 17 條記錄以後,刪除了第 15,16,17 條記錄,再把 Mysql 重啓,再 insert 一條記錄,這條記錄的 ID 是 18 仍是 15 ?mysql

  (1)若是表的類型是MylSAM,那麼是18sql

  由於MylSAM表會把自增主鍵的最大ID記錄到數據文件裏,重啓Mysql自增主鍵的最大ID也不會丟失。shell

  (2)若是表的類型是lnnoDB,那麼是15數據庫

  lnnoDB表只是把自增主鍵的最大ID記錄到內存中,因此重啓數據庫或者是對錶進行OPTIMIZE操做,都會致使最大ID丟失。編程

二、MySQL 的技術特色是什麼 ?後端

  MySQL 數據庫軟件是一個客戶端或服務器系統,其中包括:支持各類客戶端程序和庫的多線程 SQL 服務器、不一樣的後端、普遍的應用程序編程接口和管理工具。數組

三、Heap 表是什麼 ?瀏覽器

  ·HEAP 表存在於內存中,用於臨時高速存儲。緩存

  ·BLOB 或 TEXT 字段是不容許的安全

  ·只能使用比較運算符 =,,=>,= <

  ·HEAP 表不支持 AUTO_INCREMENT

  ·索引不可爲 NULL

四、MySQL 服務器默認端口是什麼 ?

  MySQL 服務器的默認端口是 3306。

五、與 Oracle 相比,MySQL 有什麼優點 ?

  ·MySQL 是開源軟件,隨時可用,無需付費。

  ·MySQL 是便攜式的

  ·帶有命令提示符的 GUI。

  ·使用 MySQL 查詢瀏覽器支持管理

六、如何區分 FLOAT 和 DOUBLE?

  如下是 FLOAT 和 DOUBLE 的區別:

  ·浮點數以 8 位精度存儲在 FLOAT 中,而且有四個字節。

  ·浮點數存儲在 DOUBLE 中,精度爲 18 位,有八個字節。

七、區分 CHAR_LENGTH 和 LENGTH?

  CHAR_LENGTH 是字符數,而 LENGTH 是字節數。Latin 字符的這兩個數據是相同的,可是對於 Unicode 和其餘編碼,它們是不一樣的。

八、請簡潔描述 MySQL 中 InnoDB 支持的四種事務隔離級別名稱,以及逐級之間的區別 ?

  SQL 標準定義的四個隔離級別爲:

  ·read uncommited :讀到未提交數據

  ·read committed:髒讀,不可重複讀

  ·repeatable read:可重讀

  ·serializable :串行事物

  

  Read Uncommitted(讀取未提交內容)

      在該隔離級別,全部事務均可以看到其餘未提交事務的執行結果。本隔離級別不多用於實際應用,由於它的性能也不比其餘級別好多少。讀取未提交的數據,也被稱之爲髒讀(Dirty Read)。

  Read Committed(讀取提交內容)

      這是大多數數據庫系統的默認隔離級別(但不是MySQL默認的)。它知足了隔離的簡單定義:一個事務只能看見已經提交事務所作的改變。這種隔離級別也支持所謂的不可重複讀(Nonrepeatable Read),由於同一事務的其餘實例在該實例處理其間可能會有新的commit,因此同一select可能返回不一樣結果。

  Repeatable Read(可重讀)

      這是MySQL的默認事務隔離級別,它確保同一事務的多個實例在併發讀取數據時,會看到一樣的數據行。不過理論上,這會致使另外一個棘手的問題:幻讀(Phantom Read)。簡單的說,幻讀指當用戶讀取某一範圍的數據行時,另外一個事務又在該範圍內插入了新行,當用戶再讀取該範圍的數據行時,會發現有新的「幻影」 行。InnoDB和Falcon存儲引擎經過多版本併發控制(MVCC,Multiversion Concurrency Control 間隙鎖)機制解決了該問題。注:其實多版本只是解決不可重複讀問題,而加上間隙鎖(也就是它這裏所謂的併發控制)才解決了幻讀問題。

  Serializable(可串行化)

  這是最高的隔離級別,它經過強制事務排序,使之不可能相互衝突,從而解決幻讀問題。簡言之,它是在每一個讀的數據行上加上共享鎖。在這個級別,可能致使大量的超時現象和鎖競爭。

       

  對於不一樣的事務,採用不一樣的隔離級別分別有不一樣的結果。不一樣的隔離級別有不一樣的現象。主要有下面3種如今:

  一、髒讀(dirty read):一個事務能夠讀取另外一個還沒有提交事務的修改數據。

  二、非重複讀(nonrepeatable read):在同一個事務中,同一個查詢在T1時間讀取某一行,在T2時間從新讀取這一行時候,這一行的數據已經發生修改,可能被更新了(update),也可能被刪除了(delete)。

  三、幻像讀(phantom read):在同一事務中,同一查詢屢次進行時候,因爲其餘插入操做(insert)的事務提交,致使每次返回不一樣的結果集。

  不一樣的隔離級別有不一樣的現象,並有不一樣的鎖定/併發機制,隔離級別越高,數據庫的併發性就越差,4種事務隔離級別分別表現的現象以下表:

  

隔離級別 髒讀 非重複讀 幻像讀
read uncommitted 容許 容許 容許
read committed   容許 容許
repeatable read     容許
serializable      

九、在 MySQL 中 ENUM 的用法是什麼 ?

  ENUM 是一個字符串對象,用於指定一組預約義的值,並可在建立表時使用。

  Create table size ( name ENUM ( 'Smail,'Medium','Large' ) ;

十、如何定義 REGEXP?

  REGEXP 是模式匹配,其中匹配模式在搜索值的任何位置。

十一、CHAR 和 VARCHAR 的區別 ?

  如下是 CHAR 和 VARCHAR 的區別:

  ·CHAR 和 VARCHAR 類型在存儲和檢索方面有所不一樣

  ·CHAR 列長度固定爲建立表時聲明的長度,長度值範圍是 1 到 255

  ·當 CHAR 值被存儲時,它們被用空格填充到特定長度,檢索 CHAR 值時需刪除尾隨空格。

十二、列的字符串類型能夠是什麼 ?

  字符串類型是:

  ·SET

  ·BLOB

  ·ENUM

  ·CHAR

  ·TEXT

  ·VARCHAR

1三、如何獲取當前的 MySQL 版本 ?

  SELECT VERSION ( ) ; 用於獲取當前 MySQL 的版本。

1四、MySQL 中使用什麼存儲引擎 ?

  存儲引擎稱爲表類型,數據使用各類技術存儲在文件中。

  技術涉及:

  ·Storage mechanism

  ·Locking levels

  ·Indexing

  ·Capabilities and functions.

1五、MySQL 驅動程序是什麼 ?

  如下是 MySQL 中可用的驅動程序:

  ·PHP 驅動程序

  ·JDBC 驅動程序

  ·ODBC 驅動程序

  ·CWRAPPER

  ·PYTHON 驅動程序

  ·PERL 驅動程序

  ·RUBY 驅動程序

  ·CAP11PHP 驅動程序

  ·Ado.net5.mxj

1六、TIMESTAMP 在 UPDATE CURRENT_TIMESTAMP 數據類型上作什麼 ?

  建立表時 TIMESTAMP 列用 Zero 更新。只要表中的其餘字段發生更改,UPDATE CURRENT_TIMESTAMP 修飾符就將時間戳字段更新爲當前時間。

1七、主鍵和候選鍵有什麼區別 ?

  表格的每一行都由主鍵惟一標識 , 一個表只有一個主鍵。

  主鍵也是候選鍵。按照慣例,候選鍵能夠被指定爲主鍵,而且能夠用於任何外鍵引用。

1八、如何使用 Unix shell 登陸 MySql?

  咱們能夠經過如下命令登陸:

  # [ mysql dir ] /bin/mysql -h hostname -u -p

1九、 myisamchk 是用來作什麼的 ?

  它用來壓縮 MyISAM 表,這減小了磁盤或內存使用。

20、MYSQL 數據庫服務器性能分析的方法命令有哪些 ?

2一、如何控制 HEAP 表的最大尺寸 ?

  Heal 表的大小可經過稱爲 max_heap_table_size 的 MySQL 配置變量來控制。

2二、MyISAM Static 和 MyISAM Dynamic 有什麼區別 ?

  在 MyISAM Static 上的全部字段有固定寬度。動態 MyISAM 表將具備像 TEXT,BLOB 等字段,以適應不一樣長度的數據類型。

  MyISAM Static 在受損狀況下更容易恢復。

2三、federated 表是什麼 ?

  federated 表,容許訪問位於其餘服務器數據庫上的表。

2四、若是一個表有一列定義爲 TIMESTAMP,將發生什麼 ?

  每當行被更改時,時間戳字段將獲取當前時間戳。

2五、列設置爲 AUTO INCREMENT 時,若是在表中達到最大值,會發生什麼狀況 ?

  它會中止遞增,任何進一步的插入都將產生錯誤,由於密鑰已被使用。

2六、怎樣才能找出最後一次插入時分配了哪一個自動增量 ?

  LAST_INSERT_ID 將返回由 Auto_increment 分配的最後一個值,而且不須要指定表名稱。

2七、你怎麼看到爲表格定義的全部索引 ?

  索引是經過如下方式爲表格定義的:

  SHOW INDEX FROM ;

28.、LIKE 聲明中的 % 和 _ 是什麼意思 ?

  % 對應於 0 個或更多字符,_ 只是 LIKE 語句中的一個字符。

2九、如何在 Unix 和 MySQL 時間戳之間進行轉換 ?

  UNIX_TIMESTAMP 是從 MySQL 時間戳轉換爲 Unix 時間戳的命令

  FROM_UNIXTIME 是從 Unix 時間戳轉換爲 MySQL 時間戳的命令

30、列對比運算符是什麼 ?

  在 SELECT 語句的列比較中使用 =,,,,,AND,OR 或 LIKE 運算符。

3一、咱們如何獲得受查詢影響的行數 ?

  行數能夠經過如下代碼得到:

  SELECT COUNT ( user_id ) FROM users;

3二、Mysql 查詢是否區分大小寫 ?

  不區分

  SELECT VERSION ( ) , CURRENT_DATE;

  SeLect version ( ) , current_date;

  seleCt vErSiOn ( ) , current_DATE;

  全部這些例子都是同樣的,MySQL 不區分大小寫。

33.、LIKE 和 REGEXP 操做有什麼區別 ?

  LIKE 和 REGEXP 運算符用於表示 ^ 和 %。

  SELECT * FROM employee WHERE emp_name REGEXP "^b";

  SELECT * FROM employee WHERE emp_name LIKE "%b";

34.、BLOB 和 TEXT 有什麼區別 ?

  BLOB 是一個二進制對象,能夠容納可變數量的數據。有四種類型的 BLOB -

  ·TINYBLOB

  ·MEDIUMBLOB 和

  ·LONGBLOB

  它們只能在所能容納價值的最大長度上有所不一樣。

  TEXT 是一個不區分大小寫的 BLOB。四種 TEXT 類型

  ·TINYTEXT

  ·MEDIUMTEXT 和

  ·LONGTEXT

  它們對應於四種 BLOB 類型,並具備相同的最大長度和存儲要求。

  BLOB 和 TEXT 類型之間的惟一區別在於對 BLOB 值進行排序和比較時區分大小寫,對 TEXT 值不區分大小寫。

3五、mysql_fetch_array 和 mysql_fetch_object 的區別是什麼 ?

  如下是 mysql_fetch_array 和 mysql_fetch_object 的區別:

  mysql_fetch_array ( ) - 將結果行做爲關聯數組或來自數據庫的常規數組返回。

  mysql_fetch_object - 從數據庫返回結果行做爲對象。

3六、咱們如何在 mysql 中運行批處理模式 ?

  如下命令用於在批處理模式下運行:

  mysql;

  mysql mysql.out

3七、MyISAM 表格將在哪裏存儲,而且還提供其存儲格式 ?

  每一個 MyISAM 表格以三種格式存儲在磁盤上:

  · ".frm" 文件存儲表定義

  · 數據文件具備 ".MYD" ( MYData ) 擴展名

  索引文件具備 ".MYI" ( MYIndex ) 擴展名

38.、MySQL 中有哪些不一樣的表格 ?

  共有 5 種類型的表格:

  ·MyISAM

  ·Heap

  ·Merge

  ·INNODB

  ·ISAM

  MyISAM 是 MySQL 的默認存儲引擎。

3九、ISAM 是什麼 ?

  ISAM 簡稱爲索引順序訪問方法。它是由 IBM 開發的,用於在磁帶等輔助存儲系統上存儲和檢索數據。

40、InnoDB 是什麼 ?

  lnnoDB 是一個由 Oracle 公司開發的 Innobase Oy 事務安全存儲引擎。

4一、MySQL 如何優化 DISTINCT?

  DISTINCT 在全部列上轉換爲 GROUP BY,並與 ORDER BY 子句結合使用。

  1

  SELECT DISTINCT t1.a FROM t1,t2 where t1.a=t2.a;

4二、如何輸入字符爲十六進制數字 ?

  若是想輸入字符爲十六進制數字,能夠輸入帶有單引號的十六進制數字和前綴 ( X ) ,或者只用 ( Ox ) 前綴輸入十六進制數字。

  若是表達式上下文是字符串,則十六進制數字串將自動轉換爲字符串。

4三、如何顯示前 50 行 ?

  在 MySql 中,使用如下代碼查詢顯示前 50 行:

  SELECT*FROM

  LIMIT 0,50;

4四、可使用多少列建立索引 ?

  任何標準表最多能夠建立 16 個索引列。

4五、NOW ( ) 和 CURRENT_DATE ( ) 有什麼區別 ?

  NOW ( ) 命令用於顯示當前年份,月份,日期,小時,分鐘和秒。

  CURRENT_DATE ( ) 僅顯示當前年份,月份和日期。

4六、什麼樣的對象可使用 CREATE 語句建立 ?

  如下對象是使用 CREATE 語句建立的:

  ·DATABASE

  ·EVENT

  ·FUNCTION

  ·INDEX

  ·PROCEDURE

  ·TABLE

  ·TRIGGER

  ·USER

  ·VIEW

47.、MySql 表中容許有多少個 TRIGGERS?

  在 MySql 表中容許有六個觸發器,以下:

  ·BEFORE INSERT

  ·AFTER INSERT

  ·BEFORE UPDATE

  ·AFTER UPDATE

  ·BEFORE DELETE and

  ·AFTER DELETE

4八、什麼是非標準字符串類型 ?

  如下是非標準字符串類型:

  ·MEDIUMTEXT

4九、什麼是通用 SQL 函數 ?

  ·CONCAT ( A, B ) - 鏈接兩個字符串值以建立單個字符串輸出。一般用於將兩個或多個字段合併爲一個字段。

  ·FORMAT ( X, D ) - 格式化數字 X 到 D 有效數字。

  ·CURRDATE ( ) , CURRTIME ( ) - 返回當前日期或時間。

  ·NOW ( ) - 將當前日期和時間做爲一個值返回。

  ·MONTH ( ) ,DAY ( ) ,YEAR ( ) ,WEEK ( ) ,WEEKDAY ( ) - 從日期值中提取給定數據。

  ·HOUR ( ) ,MINUTE ( ) ,SECOND ( ) - 從時間值中提取給定數據。

  ·DATEDIFF ( A,B ) - 肯定兩個日期之間的差別,一般用於計算年齡

  ·SUBTIMES ( A,B ) - 肯定兩次之間的差別。

  ·FROMDAYS ( INT ) - 將整數天數轉換爲日期值。

50、解釋訪問控制列表

  ACL ( 訪問控制列表 ) 是與對象關聯的權限列表。這個列表是 MySQL 服務器安全模型的基礎,它有助於排除用戶沒法鏈接的問題。

  MySQL 將 ACL ( 也稱爲受權表 ) 緩存在內存中。當用戶嘗試認證或運行命令時,MySQL 會按照預約的順序檢查 ACL 的認證信息和權限。

相關文章
相關標籤/搜索