在之前的安装配置阶段将MySQL服务器设置成了一个名为MySQL80的Windows服务,所以可以通过Windows服务的方式来启动和关闭Windows服务器程序。
除了通过可视化界面来管理Windows服务,还可以直接在命令行操作,以管理员身份运行cmd命令提示符,输入net start MySQL80
启动服务,输入net stop MySQL80
关闭服务。
MySQL使用客户端/服务器构架,服务器负责和存储的数据打交道,客户端先连接到服务器,再通过向服务器发送增删改查命令来对存储的数据进行处理。
客户端与服务器之间的连接一般是网络连接,当然如果客户端和服务器位于同一台机器上,也可以借助管道(pipe)来进行连接。
客户端与服务器连接时需要提供用户名和密码才能登录服务器,这点和Linux的用户系统一样,服务器负责用户管理和权限管理,只有管理员用户才可以进行高阶操作。
MySQL的日常使用场景如下:
MySQL默认安装到C:\Program Files\MySQL\MySQL Server 8.0
目录,该目录下的bin文件夹存放了一系列的可执行文件,其中就包含MySQL的客户端程序和服务器程序,为了操作方便,先将bin目录添加到Windows的Path环境变量中。
bin文件夹中重要的可执行文件有以下几个:
其中mysqld.exe
是MySQL服务器程序,mysql.exe
是MySQL客户端程序,mysqladmin.exe
是MySQL的管理工具,其他的暂时不需要理会。
接下来通过命令行来手动启动MySQL服务器程序,在启动之前需要先停止原先在计算机上运行的MySQL80服务器程序(服务管理界面停止MySQL80服务或是在命令行执行net stop MySQL80
)。
手动启动mysqld时可以传入参数,其中比较重要的一个是--datadir
,表示数据库存储位置,如果不指定这个参数,则会默认以C:\Program Files\MySQL\MySQL Server 8.0\data\
作为存储路径,需要确保这个路径存在。另外,Windows上MySQL安装程序运行结束后默认会创建C:\ProgramData\MySQL\MySQL Server 8.0\Data
路径,作为MySQL80服务的数据库路径。另一个可选的参数是--console
,表示mysqld直接在前台运行,不切换到后台,这样可以方便观察mysqld的打印输出。
mysqld --datadir="C:\ProgramData\MySQL\MySQL Server 8.0\Data" --console |
其他参数可通过mysqld --verbose --help来查看。 |
服务器程序启动成功后,接下来启动客户端程序以连接服务器。
mysql.exe是MySQL的客户端程序,它的启动方式如下:
mysql -h主机名 -u用户名 -p密码 |
注意上面的-h -u -p与后面跟的参数之间没有空格。
参数名 | 含义 |
---|---|
-h | 指定MySQL服务器所在的主机名或IP地址,默认为localhost或者127.0.0.1,还可以写成"--host=主机名"的形式 |
-u | 指定用户名,超级管理员的用户名是root,等效于"--user=用户名"。 |
-p | 指定密码,等效于"--password=密码"。 |
-h和-u后面的参数可以带空格,但-p不行,比如 指定完前面的参数后,还可以在后面直接指定登录后要使用的数据库,以省去USE数据库操作,比如:
|
最好不要在命令行中输入密码,以防止泄露。正确的做法是只输入-p但不跟密码参数,这样MySQL会在接下来要求输入密码,这时输入的密码不会回显,所以相对安全。 |
以下几个符号表示一条语句的结束:
比如:
mysql> SELECT NOW(); mysql> SELECT NOW()\g mysql> SELECT NOW()\G |
注意,\G返回的结果不以表格形式显示,而是以列的方式展示,如下:
mysql> SELECT NOW()\g +---------------------+ | NOW() | +---------------------+ | 2022-01-19 14:49:59 | +---------------------+ 1 row in set (0.00 sec) mysql> SELECT NOW()\G *************************** 1. row *************************** NOW(): 2022-01-19 14:50:05 1 row in set (0.00 sec) |
在未遇到结束符之前,一条语句可以跨越多行,如下:
mysql> SELECT -> NOW() -> ; +---------------------+ | NOW() | +---------------------+ | 2022-01-19 14:51:13 | +---------------------+ 1 row in set (0.00 sec) |
如下:
mysql> SELECT NOW(); SELECT NOW(); SELECT NOW(); +---------------------+ | NOW() | +---------------------+ | 2022-01-19 14:52:08 | +---------------------+ 1 row in set (0.00 sec) +---------------------+ | NOW() | +---------------------+ | 2022-01-19 14:52:08 | +---------------------+ 1 row in set (0.00 sec) +---------------------+ | NOW() | +---------------------+ | 2022-01-19 14:52:08 | +---------------------+ 1 row in set (0.00 sec) |
\c
放弃本次操作如下:
mysql> SELECT NOW() \c mysql> |
使用单引号或双引号(不推荐)来表示字符串,如下:
mysql> SELECT 'aaa'; +-----+ | aaa | +-----+ | aaa | +-----+ 1 row in set (0.00 sec) mysql> SELECT "aaa"; +-----+ | aaa | +-----+ | aaa | +-----+ 1 row in set (0.00 sec) |
严格按照单引号来引用字符串,这是SQL标准,如果字符串本身包含单引号,则要用两个单引号来进行转义,比如:
双引号不是SQL标准,只是MySQL数据库对双引号进行了扩展,使其也能用于界定字符串。另外,MySQL中有一种名为ANSI_QUOTES的模式,如果开启了这种模式,双引号就有其他特殊的用途了。 在MySQL中,还存在反引号的用法,反引号的作用是将MySQL中的保留字用作列名或表名时的转义方法,比如:
上面的示例中,第一次尝试创建表失败,因为desc是MySQL的保留字,不可以直接用作列名,第二次使用反引号后,desc被当成了正常的字符串来使用,语句执行成功。 反引号也可以用在普通字符串上,用来表示表名或列名。 另外,在SQLite数据库中,双引号和单引号会更加纠缠不清,具体可以看这个吐槽的帖子: Stop double-quoting in your SQL!!!!!!!!!! | CivFanatics Forums |