ZetCode

MySQL 的第一步

最后修改于 2021 年 5 月 18 日

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

启动/停止 MySQL 服务器

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

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

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

$ sudo systemctl start mysql
$ sudo systemctl start stop

在使用 systemd 的系统上,我们将使用上述命令启动和停止 MySQL 服务器。

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

如果我们从源代码安装了 MySQL,我们可以使用 mysql.server 命令来启动和停止 MySQL。

检查 MySQL 状态

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

$ systemctl status mysql
● mysql.service - LSB: Start and stop the mysql database server daemon
     Loaded: loaded (/etc/init.d/mysql; generated)
     Active: active (running) since Tue 2021-05-18 13:34:02 CEST; 12s ago
       Docs: man:systemd-sysv-generator(8)
    Process: 127538 ExecStart=/etc/init.d/mysql start (code=exited, status=0/SUCCESS)
      Tasks: 33 (limit: 9079)
     Memory: 100.8M
        CPU: 569ms
...

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

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

我们使用 mysqladmin 工具检查 MySQL 服务器是否正在运行。-u 选项指定 ping 服务器的用户。-p 选项是用户的密码。如果省略密码,mysqladmin 将提示输入密码。您在提示符后键入的字符不可见。这是一个更安全的解决方案,用于使用 mysqladmin。这样,没有人可以从你背后看到你键入的密码,并且它不会存储在 shell 的历史记录中。

mysqladmin 工具

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

$ mysqladmin -uroot -p shutdown

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

$ 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 服务器的版本。

$ mysqladmin -u root -p create testdb

可以使用 mysqladmin 创建数据库。

$ mysqladmin -u root -p drop testdb

此命令删除数据库。

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

我们可以使用 mysqladmin 来更改用户密码。我们输入旧密码和两次新密码。

mysql 工具

mysql 是一个 MySQL 命令行工具。它是一个简单的 shell。它支持交互式和非交互式使用。

$ 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+Dquit 命令退出 mysql。我们需要区分 mysql 命令和 SQL 语句。 SQL 语句以分号结尾。

mysql> help

For information about MySQL products and services, visit:
   https://mysqlserver.cn/
For developer information, including the MySQL Reference Manual, visit:
   https://dev.mysqlserver.cn/
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 命令的完整列表。

mysql> system pwd
/home/janbodnar

system 命令可以执行 shell 命令。我们启动了 pwd 命令来找出我们当前的工作目录。

mysql> quit
Bye

quit 命令终止 mysql shell。

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

mysql 也可以非交互式地使用。在这里我们获取工具的版本。

创建数据库

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

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

SHOW DATABASES 语句显示我们系统上所有可用的数据库。请注意,SQL 语句以分号结尾。存在四个数据库。information_schemamysqlperformance_schema 是 MySQL 系统数据库。sys 是一组用于调整和诊断用例的模式对象。还没有用户定义的数据库。

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

此语句创建一个新数据库。在整个教程中,我们将使用 mydb 数据库。要创建一个新数据库,我们需要具有某些权限。请记住,我们已使用 root 用户连接到服务器,该用户是超级用户并具有所有权限。

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

显示所有数据库,其中包含 mydb 数据库。

mysql> USE mydb;
Database changed

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

mysql> SHOW TABLES;
Empty set (0.00 sec)

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

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 表。

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

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

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 root 帐户类似,建议不要将 MySQL 超级用户 root 帐户用于我们的日常任务。我们应该仅在必要时使用 root 帐户。我们创建一个将使用的新帐户。该用户将具有有限的权限。当使用 root 用户时,我们可能会意外地对我们的数据造成很多损害。

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

上面的命令创建一个名为 user12 的新用户。该帐户的密码为 34klq*。用户已创建,但他没有任何权限。

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

此语句授予 user12mydb 数据库上所有数据库对象的所有权限。这些权限将足以满足本教程中的示例。

mysql> quit
Bye
$ mysql -u user12 -p

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

$ 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 数据库系统的第一步。