15个 MySQL 基础面试题，DBA 们准备好了吗？
================================================================================

此前我们已经有发表过Linux 面试基础问答之[一][1]、[二][2]和[三][3]共3篇文章，获得读者的好评，同时我们得到反馈，有些读者希望这种交互式学习方法能够做得更加灵活。心动不如行动，我们这就为您奉上 **15个 MySQL 面试题**

![](http://www.tecmint.com/wp-content/uploads/2013/12/Mysql-Interview-Questions.png)


### 问题1：你如何确定 MySQL 是否处于运行状态？ ###

> **答案**： Debian 上运行命令 **service mysql status**，在RedHat 上运行命令 **service mysqld status**。然后看看输出即可。

-

    root@localhost:/home/avi# service mysql status

    /usr/bin/mysqladmin  Ver 8.42 Distrib 5.1.72, for debian-linux-gnu on i486
    Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.

    Server version 5.1.72-2
    Protocol version 10
    Connection Localhost via UNIX socket
    UNIX socket /var/run/mysqld/mysqld.sock
    Uptime: 1 hour 22 min 49 sec

    Threads: 1  Questions: 112138  Slow queries: 1  Opens: 1485  Flush tables: 1  Open tables: 64  Queries per second avg: 22.567.


### 问题2：如何开启或停止 MySQL 服务？ ###

>  **答案**：运行命令 **service mysqld start** 开启服务；运行命令 **service mysqld stop** 停止服务。

-

    root@localhost:/home/avi# service mysql stop

    Stopping MySQL database server: mysqld.

    root@localhost:/home/avi# service mysql start

    Starting MySQL database server: mysqld.

    Checking for corrupt, not cleanly closed and upgrade needing tables..

### 问题3：如何通过 Shell 登入 MySQL？ ###

>  **答案**：运行命令 **mysql -u root -p**

-

    root@localhost:/home/avi# mysql -u root -p 
    Enter password: 
    Welcome to the MySQL monitor.  Commands end with ; or \g. 
    Your MySQL connection id is 207 
    Server version: 5.1.72-2 (Debian) 

    Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. 

    Oracle is a registered trademark of Oracle Corporation and/or its 
    affiliates. Other names may be trademarks of their respective 
    owners. 

    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. 

    mysql>

### 问题4：如何列出所有数据库？ ###

>  **答案**：运行命令 **show databases;**

-

    mysql> show databases; 
    +--------------------+ 
    | Database           | 
    +--------------------+ 
    | information_schema | 
    | a1                 | 
    | cloud              | 
    | mysql              | 
    | phpmyadmin         | 
    | playsms            | 
    | sisso              | 
    | test               | 
    | ukolovnik          | 
    | wordpress          | 
    +--------------------+ 
    10 rows in set (0.14 sec)

### 问题5： 如何切换到某个数据库并在上面工作？ ###

>  **答案**：运行命令 **use database_name;** 进入名为 database_name 的数据库。

-

    mysql> use cloud; 
    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>

### 问题6：如何列出某个数据库内所有表？ ###

>  **答案**：在当前数据库运行命令 **show tables;**

-

    mysql> show tables; 
    +----------------------------+ 
    | Tables_in_cloud            | 
    +----------------------------+ 
    | oc_appconfig               | 
    | oc_calendar_calendars      | 
    | oc_calendar_objects        | 
    | oc_calendar_repeat         | 
    | oc_calendar_share_calendar | 
    | oc_calendar_share_event    | 
    | oc_contacts_addressbooks   | 
    | oc_contacts_cards          | 
    | oc_fscache                 | 
    | oc_gallery_sharing         | 
    +----------------------------+ 
    10 rows in set (0.00 sec)

### 问题7：如何获取表内所有 Field 对象的名称和类型？ ###

>  **答案**：运行命令 **describe table_name;**

-

    mysql> describe oc_users; 
    +----------+--------------+------+-----+---------+-------+ 
    | Field    | Type         | Null | Key | Default | Extra | 
    +----------+--------------+------+-----+---------+-------+ 
    | uid      | varchar(64)  | NO   | PRI |         |       | 
    | password | varchar(255) | NO   |     |         |       | 
    +----------+--------------+------+-----+---------+-------+ 
    2 rows in set (0.00 sec)

### 问题8：如何删除表？ ###

>  **答案**：运行命令 **drop table table_name;**

-

    mysql> drop table lookup; 

    Query OK, 0 rows affected (0.00 sec)

### 问题9：如何删除数据库？ ###

>  **答案**：运行命令 **drop database database-name;**

-

    mysql> drop database a1; 

    Query OK, 11 rows affected (0.07 sec)

### 问题10：如何查看表内所有数据？ ###

>  **答案**：运行命令 **select * from table_name;**

-

    mysql> select * from engines; 
    +------------+---------+----------------------------------------------------------------+--------------+------+------------+ 
    | ENGINE     | SUPPORT | COMMENT                                                        | TRANSACTIONS | XA   | SAVEPOINTS | 
    +------------+---------+----------------------------------------------------------------+--------------+------+------------+ 
    | InnoDB     | YES     | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        | 
    | MRG_MYISAM | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         | 
    | BLACKHOLE  | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         | 
    | CSV        | YES     | CSV storage engine                                             | NO           | NO   | NO         | 
    | MEMORY     | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         | 
    | FEDERATED  | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       | 
    | ARCHIVE    | YES     | Archive storage engine                                         | NO           | NO   | NO         | 
    | MyISAM     | DEFAULT | Default engine as of MySQL 3.23 with great performance         | NO           | NO   | NO         | 
    +------------+---------+----------------------------------------------------------------+--------------+------+------------+ 
    8 rows in set (0.00 sec)

### 问题11：如何从表（比如 oc_users ）中获取一个 field 对象（比如 uid）的所有数据？ ###

>  **答案**：运行命令 **select uid from oc_users;**

-

    mysql> select uid from oc_users; 
    +-----+ 
    | uid | 
    +-----+ 
    | avi | 
    +-----+ 
    1 row in set (0.03 sec)

### 问题12：假设你有一个名为 ‘xyz’ 的表，它存在多个字段，如 ‘create_time’ 和 ‘engine’。名为 engine 的字段由 ‘Memoty’ 和 ‘MyIsam’ 两种数值组成。如何只列出 ‘create_time’ 和 ‘engine’ 这两列并且 engine 的值为 ‘MyIsam’？ ###

>  **答案**：运行命令 **select create_time, engine from xyz where engine = ”MyIsam”;**

-

    mysql> select create_time, engine from xyz where engine="MyIsam";

    +---------------------+--------+ 
    | create_time         | engine | 
    +---------------------+--------+ 
    | 2013-12-15 13:43:27 | MyISAM | 
    | 2013-12-15 13:43:27 | MyISAM | 
    | 2013-12-15 13:43:27 | MyISAM | 
    | 2013-12-15 13:43:27 | MyISAM | 
    | 2013-12-15 13:43:27 | MyISAM | 
    | 2013-12-15 13:43:27 | MyISAM | 
    | 2013-12-15 13:43:27 | MyISAM | 
    | 2013-12-15 13:43:27 | MyISAM | 
    | 2013-10-23 14:56:38 | MyISAM | 
    | 2013-10-23 14:56:38 | MyISAM | 
    | 2013-10-23 14:56:38 | MyISAM | 
    | 2013-10-23 14:56:38 | MyISAM | 
    | 2013-10-23 14:56:38 | MyISAM | 
    | 2013-10-23 14:56:38 | MyISAM | 
    | 2013-10-23 14:56:38 | MyISAM | 
    +---------------------+--------+ 
    132 rows in set (0.29 sec)

### 问题13：如何列出表 ‘xrt’ 内 name 域值为 ‘tecmint’，web_address 域值为 ‘tecmint.com’ 的所有数据？ ###

>  **答案**：运行命令 **select * from xrt where name = “tecmint” and web_address = “tecmint.com”;**

-

    mysql> select  * from xrt where name = "tecmint" and web_address = “tecmint.com”;
    +---------------+---------------------+---------------+ 
    | Id                  | name                   | web_address | 
    +---------------+---------------------+----------------+ 
    | 13                 |  tecmint               | tecmint.com  |
    +---------------+---------------------+----------------+ 
    | 41                 |  tecmint               | tecmint.com  |
    +---------------+---------------------+----------------+

### 问题14：如何列出表 ‘xrt’ 内 name 域值不为 ‘tecmint’，web_address 域值为 ‘tecmint.com’ 的所有数据？ ###

>  **答案**：运行命令 **select * from xrt where name != "tecmint" and web_address = "tecmint.com";**

-

    mysql> select * from xrt where name != ”tecmint” and web_address = ”tecmint.com”;

    +---------------+---------------------+---------------+ 
    | Id            | name                | web_address   | 
    +---------------+---------------------+----------------+ 
    | 1173          |  tecmint            | tecmint.com   |
    +---------------+---------------------+----------------+

### 问题15：如何知道表内行数？

>  **答案**：运行命令 **select count(*) from table_name;**

-

    mysql> select count(*) from Tables; 

    +----------+ 
    | count(*) | 
    +----------+ 
    |      282 | 
    +----------+ 
    1 row in set (0.01 sec)

以上是文章的全部内容。这篇‘**Linux 面试题**’对您有任何帮助吗？别忘了在下面留言，写出您的宝贵意见。

--------------------------------------------------------------------------------

via: http://www.tecmint.com/basic-mysql-interview-questions-for-database-administrators/

译者：[bazz2](https://github.com/bazz2) 校对：[Caroline](https://github.com/carolinewuyan)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译，[Linux中国](http://linux.cn/) 荣誉推出

[1]:http://linux.cn/article-2315-1.html
[2]:http://linux.cn/article-2370-1.html
[3]:http://linux.cn/article-2371-1.html
