給linux使用者的11個高階MySQL資料庫面試問題和答案

linux.cn發表於2014-08-15

  我們已經發表了兩篇MySQL的文章,非常感謝Tecmint社群的大力支援。這是MySQL面試系列的第三篇文章,並且在面試專欄中排第16。

  因為有大家的支援,我們才能做到現在,感謝你們這一路上對我們的支援.在這篇文章中,我們將主要針對MySQL的實用技巧,講講面試中相關的問題.

  1. 如何使用SELECT語句找到你正在執行的伺服器的版本並列印出當前資料庫的名稱?

  答:下面的語句的結果會顯示伺服器的版本和當前的資料庫名稱

 mysql> SELECT VERSION(), DATABASE();

 +-------------------------+------------+
 | VERSION()               | DATABASE() |
 +-------------------------+------------+
 | 5.5.34-0ubuntu0.13.10.1 | NULL       |
 +-------------------------+------------+
 1 row in set (0.06 sec)

  在Database一列中顯示NULL是因為我們當前沒有選擇任何資料庫。因此,使用下面的語句先選擇一個資料庫,就能看到相應的結果。

mysql> use Tecmint;

Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select VERSION(), DATABASE();

+-------------------------+------------+
| VERSION()               | DATABASE() |
+-------------------------+------------+
| 5.5.34-0ubuntu0.13.10.1 | tecmint    |
+-------------------------+------------+
1 row in set (0.00 sec)

  2. 使用非運算子(!)從表"Tecmint"中列出除了"SAM"以外的所有user記錄

  答:使用下面的語句

mysql> SELECT * FROM Tecmint WHERE user !=SAM;

+---------------------+---------+---------+---------+---------+-------+ 
| date                | user    | host   | root     | local   | size  | 
+---------------------+---------+---------+---------+---------+-------+ 
| 2001-05-14 14:42:21 | Anthony | venus  | barb     | venus   | 98151 | 
| 2001-05-15 08:50:57 | TIM     | venus  | phil     | venus   | 978   | 
+---------------------+---------+---------+---------+---------+-------+

  3. ‘AND’運算子有可能帶著非運算子(!)一起用嗎?

  答:當我們使用‘=’號時用‘AND’連線,用‘!=’時用‘OR’連線,下面是‘=’和AND運算子一起用的例子

mysql> SELECT * FROM mail WHERE user = SAM AND root = phil

  ‘!=’和OR運算子的例子

mysql> SELECT * FROM mail WHERE user != SAM OR root != phil

+---------------------+---------+---------+---------+---------+-------+ 
| date                | user    | host    | root    | local   | size  | 
+---------------------+---------+---------+---------+---------+-------+ 
| 2001-05-14 14:42:21 | Anthony | venus   | barb    | venus   | 98151 | 
+---------------------+---------+---------+---------+---------+-------+
  • = : 等於
  • != : 不等於
  • ! : 代表“非”的運算子

  AND和OR在MySQL中被看作連線運算子

  4. IFNULL()當打在MySQL中有什麼作用?

  答:使用IFNULL()方法能使MySQL中的查詢更加精確。IFNULL()方法將會測試它的第一個引數,若不為NULL則返回該引數的值,否則返回第二個引數的值

mysql> SELECT name, IFNULL(id,'Unknown') AS 'id' FROM taxpayer;

+---------+---------+ 
| name    | id      | 
+---------+---------+ 
| bernina | 198-48  | 
| bertha  | Unknown | 
| ben     | Unknown | 
| bill    | 475-83  | 
+---------+---------+

  5. 如果你只想知道從一個結果集的開頭或者結尾開始的特定幾條記錄,該如何實現?

  答:我們需要把LIMIT語句接在ORDER BY語句後使用,以達到上述效果。

  顯示一行記錄

mysql> SELECT * FROM name LIMIT 1;

+----+------+------------+-------+----------------------+------+ 
| id | name | birth      | color | foods                | cats | 
+----+------+------------+-------+----------------------+------+ 
| 1  | Fred | 1970-04-13 | black | lutefisk,fadge,pizza | 0    | 
+----+------+------------+-------+----------------------+------+

  顯示5行記錄

mysql> SELECT * FROM profile LIMIT 5;

+----+------+------------+-------+-----------------------+------+ 
| id | name | birth      | color | foods                 | cats | 
+----+------+------------+-------+-----------------------+------+ 
| 1  | Fred | 1970-04-13 | black | lutefisk,fadge,pizza  | 0    | 
| 2  | Mort | 1969-09-30 | white | burrito,curry,eggroll | 3    | 
| 3  | Brit | 1957-12-01 | red   | burrito,curry,pizza   | 1    |   
| 4  | Carl | 1973-11-02 | red   | eggroll,pizza         | 4    | 
| 5  | Sean | 1963-07-04 | blue  | burrito,curry         | 5    | 
+----+------+------------+-------+-----------------------+------+

  顯示按照ORDER BY排序後的第一條記錄

mysql> SELECT * FROM profile ORDER BY birth LIMIT 1;

+----+------+------------+-------+----------------+------+ 
| id | name | birth      | color | foods          | cats | 
+----+------+------------+-------+----------------+------+ 
| 9  | Dick | 1952-08-20 | green | lutefisk,fadge | 0    | 
+----+------+------------+-------+----------------+------+

  6. Oracle 和 MySQL該如何選擇,為什麼?

  答:它們都有各自的優點和缺點。考慮到時間因素,我傾向於MySQL。

 選擇MySQL而不選orcale的原因

  • MySQL開源
  • MySQL輕便快捷
  • MySQL對命令列和圖形介面的支援都很好
  • MySQL支援通過Query Browser進行管理

  7. MySQL中如何得到當前日期?

  答:在MySQL中獲取當前日期就是如下的SELECT語句這麼簡單。

mysql> SELECT CURRENT_DATE();

+----------------+
| CURRENT_DATE() |
+----------------+
| 2014-06-17     |
+----------------+

  8. MySQL中如何將表匯出為XML檔案?

  答:我們可以使用'-e'(export)選項來把MySQL表或整個資料庫匯出到XML檔案。當處理大型表的時候我們可能需要手動匯出,不過對於小表的話可以直接使用想phpMyAdmin等這樣的工具。

mysql -u USER_NAME -xml -e 'SELECT * FROM table_name' > table_name.xml

  上面的例子中USER_NAME是資料庫的使用者名稱,table_name是待匯出為xml檔案的表名,table_name.xml是存放資料的xml檔案

  9. MySQL_pconnect是什麼? 它和MySQL_connect有什麼區別?

  答:MySQL_pconnect()開啟一個持久的資料庫連線,這意味著資料庫不是在每次頁面載入的時候被開啟一個新連線,因此我們不能使用MySQL_close()來關閉一個持久的連線。

  MySQL_pconnect和MySQL_connect最簡要的區別是:

  與MySQL_pconnect不同,MySQL_connect在每次頁面被載入的時候開啟連線,這個連線可以使用MySQL_close()語句來關閉。

  10. 當你需要檢視一個名為'mysql'的資料庫中'user'表中的所有索引時,你會如何做?

  答:下面的命令將會顯示出‘user’表中所有的索引

mysql> show index from user;
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ 
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | 
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ 
| user  |          0 | PRIMARY  |            1 | Host        | A         |        NULL |     NULL | NULL   |      | BTREE      |         |               | 
| user  |          0 | PRIMARY  |            2 | User        | A         |           4 |     NULL | NULL   |      | BTREE      |         |               | 
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ 
2 rows in set (0.00 sec)

  11. 什麼是CSV表?

  答:CSV是逗號分隔值(Comma-Separated Values)或也被稱為字元分隔值(Character-Separated Values)的縮寫。CSV表以純文字和表格形式來儲存資料。

  每一條記錄都使用特定的分隔符隔開(如逗號,分號,...),並且每條記錄都有著順序相同的列。CSV表最廣泛地被用來儲存用於匯入和匯出的電話聯絡人,並能夠用來儲存任何型別的純文字資料。

  以上就是這次要講的全部內容。我還會帶來其他你們應該會喜歡的有趣的文章。到那時敬請關注並訪問Tecmint,不要忘了在下方的評論欄中留下你們的寶貴意見。 

  via: http://www.tecmint.com/mysql-advance-interview-questions/ 譯者:GOLinux 譯文:linux.cn

相關文章