网站搜索

11 面向 Linux 用户的高级 MySQL 数据库“面试问答”


我们已经发表了两篇MySQL文章,受到Howtoing社区的高度赞赏。这是 MySQL 面试系列的第三篇文章,也是面试类型专栏中的第 16 篇文章。

  1. 15 个基本 MySQL 面试问题
  2. 10 道 MySQL 数据库中级面试题

我们能走到今天这一切都是因为您的支持,我们也希望您的未来也能如此。在这篇文章中,我们将集中讨论 MySQL 的实践方面,即与面试方面相关的问题。

1.使用SELECT语句查找您正在运行的服务器的版本并打印当前数据库的名称?

Ans: 下面的 MySQL 命令将显示服务器版本和当前选择的数据库。

mysql> SELECT VERSION(), DATABASE();

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

在数据库列中,它显示 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. 使用 NOT 运算符 (!) 从“Tecmint”表中选择除“SAM”之外的所有用户

Ans: 下面的语句将显示表 'Tecmint' 中除用户 'SAM 之外的所有用户的所有列'。

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. 是否可以用 NOT (!) 运算符实现“AND”。

Ans: 使用 (=) 时使用 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 | 
+---------------------+---------+---------+---------+---------+-------+
  1. = :表示等于
  2. != : 不等于
  3. ! : 代表 NOT 运算符

AND 和 OR 在 MySQL 中被视为连接运算符。

4. MySQL中IFNULL()语句的用途是什么?

Ans: MySQL中的查询可以使用IFNULL()语句精确编写。 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. 您只想从结果集的开头或结尾查看结果集中的某些行。你会怎么做?

Ans: 我们需要使用 LIMIT 子句和 ORDER BY 来实现上述场景。

显示 1 条记录
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    | 
+----+------+------------+-------+-----------------------+------+
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。哪一个以及为什么?

Ans: 两者都有其优点和缺点。随着时间的推移,我更喜欢 MySQL。

选择 MySQL 而不是 Oracle 的原因
  1. Mysql是源码。
  2. MySQL 是可移植的。
  3. MYSQL 支持 GUI 和命令提示符。
  4. 通过查询浏览器支持 MySQL 管理。
7. 如何获取 MySQL 中的当前日期?

Ans:MySQL 中获取当前日期就像执行下面的 SELECT 语句一样简单。

mysql> SELECT CURRENT_DATE();

+----------------+
| CURRENT_DATE() |
+----------------+
| 2014-06-17     |
+----------------+
8. 如何在 MySQL 中将表导出为 XML 文件?

Ans: 我们使用“-e”(导出)选项将 MySQL 表或整个数据库导出到 XML 文件中。对于大型表,我们可能需要手动实现它,但对于小型表,像 phpMyAdmin 这样的应用程序可以完成这项工作。

MySQL 的本机命令可以做到这一点。

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 有何不同?

Ans: MySQL_pconnect() 打开一个与 MySQL 数据库持久的连接,这仅仅意味着数据库不会在每次页面加载时打开,因此我们不能使用 MySQL_close() 关闭持久连接。

MySQL_pconnect 和 MySQL_connect 之间的一个简短区别是。

与 MySQL_pconnect 不同,MySQL_connect – 每次加载页面时都会打开数据库,可以使用语句 MySQL_close() 随时关闭数据库。

10. 您需要显示数据库“mysql”的“user”表中定义的所有索引。您将如何实现这一目标?

Ans:以下命令将显示表“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 表?

Ans: CSV 代表逗号分隔值,也称为字符分隔值。 CSV 表以纯文本和表格格式存储数据。它通常每行包含一个记录。

每条记录由特定的分隔符(逗号、分号……)分隔,其中每条记录具有相同的字段序列。 CSV 表最广泛用于存储要导入和导出的电话联系人,并且可用于存储任何类型的纯文本数据。

目前为止就这样了。我将再次在这里发表另一篇有趣的文章,你们一定会喜欢阅读的。在此之前,请继续关注并联系 Tecmint,不要忘记在下面的评论部分向我们提供您的宝贵反馈。