# MySQL 的第一步

> 原文： [http://zetcode.com/databases/mysqltutorial/firststeps/](http://zetcode.com/databases/mysqltutorial/firststeps/)

在本章中，我们将使用 MySQL 迈出第一步。 我们将启动服务器，使用客户端工具连接到服务器，创建新用户并发布第一个 SQL 语句。

## 启动/停止 MySQL 服务器

MySQL 服务器是在后台运行的守护程序。 启动 MySQL 的方式取决于您的系统和完成的安装类型。

```sql
$ sudo /etc/init.d/mysqld start
$ sudo /etc/init.d/mysqld stop

```

在基于传统`init`的系统上，我们将使用上述命令来启动和停止 MySQL 服务器。

```sql
$ sudo service mysql start
$ sudo service mysql stop

```

Debian 已迁移到 Upstart，这是一个基于事件的守护程序，用于启动任务和服务并进行监督。 在使用 Upstart 的系统上，我们将使用上述命令启动和停止 MySQL 服务器。

```sql
$ sudo /usr/local/mysql/support-files/mysql.server start
$ sudo /usr/local/mysql/support-files/mysql.server stop

```

如果从源代码安装了 MySQL，则可以使用`mysql.server`命令启动和停止 MySQL。

## 检查 MySQL 状态

我们将展示如何检查 MySQL 服务器的状态。

```sql
$ service mysql status
● mysql.service - MySQL Community Server
   Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
   Active: active (running) since Pi 2017-01-27 16:32:12 CET; 2h 7min ago
 Main PID: 9439 (mysqld)
   CGroup: /system.slice/mysql.service
           └─9439 /usr/sbin/mysqld

jan 27 16:32:10 t400 systemd[1]: Starting MySQL Community Server...
jan 27 16:32:12 t400 systemd[1]: Started MySQL Community Server.
jan 27 16:32:26 t400 systemd[1]: Started MySQL Community Server.

```

我们使用`service mysql status`命令检查状态。

```sql
$ mysqladmin -u root -p ping
Enter password: 
mysqld is alive

```

我们使用`mysqladmin`工具检查 MySQL 服务器是否正在运行。 `-u`选项指定对服务器执行`ping`操作的用户。 `-p`选项是用户的密码。 如果省略密码，则`mysqladmin`提示输入一个。 在提示符后键入的字符不可见。 这是用于`mysqladmin`的更安全的解决方案。 这样，任何人都不会看到您键入的密码，并且该密码不会存储在外壳程序的历史记录中。

## `mysqladmin`工具

`mysqladmin`是用于执行管理操作的客户端。

```sql
$ mysqladmin -uroot -p shutdown

```

我们使用`mysqladmin`工具关闭 MySQL 服务器。

```sql
$ mysqladmin -u root -p version
Enter password: 
...
Server version          5.7.17-0ubuntu0.16.04.1
Protocol version        10
Connection              Localhost via UNIX socket
UNIX socket             /var/run/mysqld/mysqld.sock
Uptime:                 45 sec
...

```

我们使用`mysqladmin`检查 MySQL 服务器的版本。

```sql
$ mysqladmin -u root -p create testdb

```

可以使用`mysqladmin`创建数据库。

```sql
$ mysqladmin -u root -p drop testdb

```

此命令删除数据库。

```sql
$ mysqladmin -u root -p password 
Enter password: 
New password: 
Confirm new password: 

```

我们可以使用`mysqladmin`更改用户密码。 我们输入旧密码，然后输入两次新密码。

## `mysql`工具

`mysql`是 MySQL 命令行工具。 这是一个简单的外壳。 它支持交互和非交互使用。

```sql
$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 5.7.17-0ubuntu0.16.04.1 (Ubuntu)

Copyright (c) 2000, 2016, 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>

```

我们使用`mysql`工具连接到服务器。 请注意，我们在`-p`选项之后省略了密码。 我们在`Enter password:`提示符后键入密码。

`mysql`命令行工具以`mysql>`作为提示符。 在此提示下，我们可以发出`mysql`内置命令和 SQL 语句。 我们需要熟悉`mysql`工具。 `Ctrl + L`清除屏幕，`Ctrl + D`或`quit`命令退出`mysql`。 我们需要区分`mysql`命令和 SQL 语句。 SQL 语句以分号终止。

```sql
mysql> help

For information about MySQL products and services, visit:
   http://www.mysql.com/
For developer information, including the MySQL Reference Manual, visit:
   http://dev.mysql.com/
To buy MySQL Enterprise support, training, or other products, visit:
   https://shop.mysql.com/

List of all MySQL commands:
Note that all text commands must be first on line and end with ';'
?         (\?) Synonym for `help'.
clear     (\c) Clear the current input statement.
connect   (\r) Reconnect to the server. Optional arguments are db and host.
delimiter (\d) Set statement delimiter.
edit      (\e) Edit command with $EDITOR.
ego       (\G) Send command to mysql server, display result vertically.
exit      (\q) Exit mysql. Same as quit.
go        (\g) Send command to mysql server.
help      (\h) Display this help.
nopager   (\n) Disable pager, print to stdout.
notee     (\t) Don't write into outfile.
pager     (\P) Set PAGER [to_pager]. Print the query results via PAGER.
print     (\p) Print current command.
prompt    (\R) Change your mysql prompt.
quit      (\q) Quit mysql.
...

```

键入`help`以获得`mysql`命令的完整列表。

```sql
mysql> system pwd
/home/janbodnar

```

`system`命令可以执行 Shell 命令。 我们已经启动了`pwd`命令来查找当前的工作目录。

```sql
mysql> quit
Bye

```

`quit`命令终止`mysql` Shell。

```sql
$ mysql --version
mysql  Ver 14.14 Distrib 5.7.17, for Linux (x86_64) using  EditLine wrapper

```

`mysql`也可以非交互方式使用。 在这里，我们获得了该工具的版本。

## 建立数据库

现在，我们将创建数据库。

```sql
mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0,00 sec)

```

`SHOW DATABASES`语句显示我们系统上的所有可用数据库。 请注意，SQL 语句以分号终止。 存在四个数据库。 `information_schema`，`mysql`和`performance_schema`是 MySQL 系统数据库。 `sys`是用于调整和诊断用例的一组架构对象。 尚无用户定义的数据库。

```sql
mysql> CREATE DATABASE mydb;
Query OK, 1 row affected (0,00 sec)

```

该语句创建一个新的数据库。 在整个教程中，我们将使用`mydb`数据库。 要创建新数据库，我们需要具有某些特权。 请记住，我们已经以`root`用户（超级用户并具有所有特权）连接到服务器。

```sql
mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mydb               |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0,00 sec)

```

显示所有数据库，其中有`mydb`数据库。

```sql
mysql> USE mydb;
Database changed

```

为了使用数据库，我们必须首先选择它。 我们使用`USE`命令选择一个特定的数据库。

```sql
mysql> SHOW TABLES;
Empty set (0.00 sec)

```

`SHOW TABLES`语句显示数据库中所有可用的表。 由于它是新创建的数据库，因此找不到表。

```sql
mysql> source cars.sql
Database changed
Query OK, 0 rows affected (0.20 sec)

Query OK, 1 row affected (0.08 sec)

...

```

在第一章中，我们提供了一些 SQL 脚本来创建一些表。 我们使用`source`命令执行`cars.sql`脚本，该脚本为我们创建了`Cars`表。

```sql
mysql> SHOW TABLES;
+----------------+
| Tables_in_mydb |
+----------------+
| Cars           |
+----------------+
1 row in set (0,00 sec)

```

现在`SHOW TABLES`语句显示一个可用表。

```sql
mysql> SELECT * FROM Cars;
+----+------------+--------+
| Id | Name       | Cost   |
+----+------------+--------+
|  1 | Audi       |  52642 |
|  2 | Mercedes   |  57127 |
|  3 | Skoda      |   9000 |
|  4 | Volvo      |  29000 |
|  5 | Bentley    | 350000 |
|  6 | Citroen    |  21000 |
|  7 | Hummer     |  41400 |
|  8 | Volkswagen |  21600 |
+----+------------+--------+
8 rows in set (0,00 sec)

```

这就是表中的数据。

## 创建一个新用户

与 Unix 根帐户类似，建议不要在日常工作中使用 MySQL 超级用户根帐户。 我们仅在必要时才使用`root`帐户。 我们创建一个将要使用的新帐户。 该用户将具有有限的权限。 使用`root`用户时，我们可能会意外地对我们的数据造成很多损害。

```sql
mysql> CREATE USER user12@localhost IDENTIFIED BY '34klq*';

```

上面的命令创建一个名为`user12`的新用户。 帐户具有密码`34klq*`。 用户已创建，但没有特权。

```sql
mysql> GRANT ALL ON mydb.* TO user12@localhost;

```

该语句为`mydb`数据库上的所有数据库对象授予`user12`所有特权。 这些特权足以满足本教程中的示例要求。

```sql
mysql> quit
Bye
$ mysql -u user12 -p

```

现在，我们可以使用新的用户帐户连接到 MySQL。

```sql
$ mysql -u user12 -p mydb -e "SELECT * FROM Cars"
Enter password: 
+----+------------+--------+
| Id | Name       | Cost   |
+----+------------+--------+
|  1 | Audi       |  52642 |
|  2 | Mercedes   |  57127 |
|  3 | Skoda      |   9000 |
|  4 | Volvo      |  29000 |
|  5 | Bentley    | 350000 |
|  6 | Citroen    |  21000 |
|  7 | Hummer     |  41400 |
|  8 | Volkswagen |  21600 |
+----+------------+--------+

```

我们非交互地连接到`mydb`数据库并执行一条 SQL 语句。 在`-e`选项之后指定要执行的语句。

在本章中，我们使用 MySQL 数据库系统进行了第一步。