MySQL基本操作
第3章:MySQL基本操作
3.1 连接与退出MySQL
在开始使用MySQL之前,首先需要学习如何连接到MySQL服务器以及如何安全地退出。本节将介绍多种连接MySQL的方法,包括命令行连接、图形界面工具连接,以及常用的连接参数和安全连接方式。
3.1.1 命令行连接
命令行是连接MySQL最基本也是最常用的方式,尤其适合服务器管理和脚本自动化。
基本连接语法
在终端或命令提示符中,使用mysql
命令连接到MySQL服务器:
mysql -u username -p -h hostname -P port
参数说明:
-u username
:指定用户名-p
:提示输入密码(为安全起见,密码不应在命令行中直接输入)-h hostname
:指定主机名或IP地址(默认为localhost)-P port
:指定端口号(默认为3306)
示例:
# 连接到本地MySQL服务器
mysql -u root -p# 连接到远程MySQL服务器
mysql -u root -p -h 192.168.1.100 -P 3306
执行命令后,系统会提示输入密码。输入正确的密码后,将进入MySQL命令行界面,提示符变为mysql>
。
直接执行SQL命令
可以在连接时直接执行SQL命令,然后退出:
mysql -u root -p -e "SHOW DATABASES;"
参数-e
后跟随的SQL命令将在连接成功后立即执行,执行完毕后自动退出MySQL。
执行SQL脚本文件
可以使用<
或source
命令执行SQL脚本文件:
# 方法1:使用重定向
mysql -u root -p database_name < script.sql# 方法2:使用source命令(在MySQL命令行中)
mysql> source /path/to/script.sql
连接到特定数据库
可以在连接时指定要使用的数据库:
mysql -u root -p database_name
这样连接后,会自动选择指定的数据库作为当前数据库。
3.1.2 图形界面工具连接
对于不熟悉命令行的用户,或者需要更直观操作的场景,可以使用图形界面工具连接MySQL。
MySQL Workbench
MySQL Workbench是Oracle官方提供的MySQL图形界面管理工具,功能强大,支持Windows、Linux和macOS。
连接步骤:
- 启动MySQL Workbench
- 点击"Database" > “Connect to Database"或主页上的"New Connection”
- 输入连接信息:
- Connection Name:连接名称(自定义)
- Hostname:主机名或IP地址
- Port:端口号(默认3306)
- Username:用户名
- Password:点击"Store in Vault…"存储密码
- 点击"Test Connection"测试连接
- 连接成功后,点击"OK"建立连接
MySQL Workbench提供了全面的数据库管理功能,包括SQL编辑器、数据建模、服务器管理、用户管理等。
phpMyAdmin
phpMyAdmin是一个基于Web的MySQL管理工具,通常与LAMP/WAMP/MAMP环境一起安装。
连接步骤:
- 在浏览器中访问phpMyAdmin地址(如http://localhost/phpmyadmin)
- 在登录页面输入用户名和密码
- 点击"执行"按钮登录
phpMyAdmin适合Web开发环境,提供了直观的界面来管理数据库、表、字段、索引等。
Navicat
Navicat是一款商业数据库管理工具,支持多种数据库系统,包括MySQL。
连接步骤:
- 启动Navicat
- 点击"连接"按钮或"文件" > “新建连接” > “MySQL”
- 在连接属性中填写:
- 连接名:自定义名称
- 主机:主机名或IP地址
- 端口:端口号(默认3306)
- 用户名和密码
- 点击"测试连接"验证设置
- 连接成功后,点击"确定"保存连接
Navicat提供了丰富的功能,包括数据库设计、数据同步、数据导入导出等。
DBeaver
DBeaver是一个免费的通用数据库工具,支持几乎所有主流数据库。
连接步骤:
- 启动DBeaver
- 点击"新建连接"按钮
- 选择"MySQL"
- 填写连接信息:
- 服务器主机
- 端口
- 数据库名(可选)
- 用户名和密码
- 点击"测试连接"
- 连接成功后,点击"完成"
DBeaver是一个功能全面的开源工具,适合需要管理多种数据库的用户。
3.1.3 连接参数详解
MySQL提供了许多连接参数,可以根据需要进行配置。
常用连接参数
参数 | 描述 | 示例 |
---|---|---|
-u, --user | 用户名 | mysql -u root |
-p, --password | 密码(建议不直接在命令行中输入) | mysql -p |
-h, --host | 主机名或IP地址 | mysql -h 192.168.1.100 |
-P, --port | 端口号 | mysql -P 3307 |
-D, --database | 要使用的数据库 | mysql -D mydb |
-e, --execute | 执行SQL语句并退出 | mysql -e "SELECT VERSION();" |
--default-character-set | 设置默认字符集 | mysql --default-character-set=utf8mb4 |
--ssl-mode | SSL连接模式 | mysql --ssl-mode=REQUIRED |
--compress | 压缩客户端和服务器之间的通信 | mysql --compress |
--protocol | 连接协议(TCP、SOCKET、PIPE、MEMORY) | mysql --protocol=TCP |
配置文件中的连接参数
可以在配置文件(如~/.my.cnf
或C:\my.ini
)中设置连接参数,避免每次都输入:
[client]
user=username
password=password
host=hostname
port=3306
default-character-set=utf8mb4
使用配置文件时,只需执行mysql
命令即可连接,无需额外参数。
安全提示:如果在配置文件中存储密码,请确保文件权限设置正确,防止未授权访问。在Linux/Unix系统中,应使用
chmod 600 ~/.my.cnf
限制文件权限。
3.1.4 安全连接方式
为了保护数据传输安全,MySQL提供了SSL/TLS加密连接选项。
启用SSL/TLS连接
在命令行中使用SSL/TLS连接:
mysql -u username -p -h hostname --ssl-mode=REQUIRED
SSL模式选项:
DISABLED
:不使用SSLPREFERRED
:如果服务器支持SSL则使用(默认)REQUIRED
:要求使用SSL连接VERIFY_CA
:验证服务器证书VERIFY_IDENTITY
:验证服务器证书和主机名
使用证书进行连接:
mysql -u username -p -h hostname \--ssl-ca=/path/to/ca.pem \--ssl-cert=/path/to/client-cert.pem \--ssl-key=/path/to/client-key.pem
验证SSL连接
连接后,可以验证是否使用了SSL/TLS:
SHOW STATUS LIKE 'Ssl_cipher';
如果返回非空值,表示当前连接使用了SSL加密。
也可以使用以下命令查看更详细的SSL信息:
SHOW VARIABLES LIKE '%ssl%';
\s -- 显示状态信息,包括SSL
3.1.5 退出MySQL
有多种方法可以安全地退出MySQL命令行界面:
-- 方法1:使用EXIT命令
EXIT;-- 方法2:使用QUIT命令
QUIT;-- 方法3:使用\q快捷方式
\q
这些命令都会安全地关闭连接并退出MySQL命令行界面。如果有未提交的事务,MySQL会提示是否提交或回滚。
3.1.6 连接故障排查
连接MySQL时可能遇到各种问题,以下是常见问题及解决方法:
访问被拒绝错误
错误消息:ERROR 1045 (28000): Access denied for user 'username'@'hostname' (using password: YES|NO)
可能原因和解决方法:
- 用户名或密码错误:检查并重新输入
- 用户不存在:创建用户或使用正确的用户名
- 用户没有从当前主机连接的权限:授予权限或从允许的主机连接
- 密码过期:重置密码
无法连接到服务器
错误消息:ERROR 2003 (HY000): Can't connect to MySQL server on 'hostname' (10061)
可能原因和解决方法:
- MySQL服务未运行:启动MySQL服务
- 指定的端口错误:检查并使用正确的端口
- 防火墙阻止:配置防火墙允许MySQL端口
- 服务器只监听本地连接:修改
bind-address
配置
连接超时
错误消息:ERROR 2013 (HY000): Lost connection to MySQL server during query
可能原因和解决方法:
- 网络不稳定:检查网络连接
- 服务器超时设置过低:调整
wait_timeout
和interactive_timeout
参数 - 查询执行时间过长:优化查询或调整
max_execution_time
SSL连接问题
错误消息:ERROR 2026 (HY000): SSL connection error
可能原因和解决方法:
- SSL证书路径错误:检查证书文件路径
- 证书过期或无效:更新证书
- 服务器未配置SSL:配置服务器支持SSL
通过掌握连接和退出MySQL的基本操作,您可以开始探索MySQL的更多功能。无论是使用命令行还是图形界面工具,了解如何正确连接到MySQL服务器是使用MySQL的第一步。
3.2 数据库操作
数据库是MySQL中的基本组织单元,用于存储和组织相关的表、视图、存储过程等对象。本节将详细介绍如何创建、查看、选择、修改和删除数据库。
3.2.1 创建数据库
在MySQL中,使用CREATE DATABASE
语句创建新的数据库。
基本语法
CREATE DATABASE [IF NOT EXISTS] database_name
[CHARACTER SET charset_name]
[COLLATE collation_name];
参数说明:
IF NOT EXISTS
:可选,如果数据库已存在,则不会创建新数据库,也不会报错database_name
:数据库名称CHARACTER SET charset_name
:可选,指定数据库的默认字符集COLLATE collation_name
:可选,指定数据库的默认排序规则
示例
创建基本数据库:
CREATE DATABASE mydb;
创建数据库(如果不存在):
CREATE DATABASE IF NOT EXISTS mydb;
创建指定字符集和排序规则的数据库:
CREATE DATABASE mydb
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
数据库命名规则
MySQL数据库命名应遵循以下规则:
- 可以包含字母、数字、下划线和美元符号
- 最大长度为64个字符
- 不能使用MySQL保留字
- 区分大小写(取决于操作系统的文件系统)
- 不能包含空格或特殊字符(如
/
,\
,.
, 等)
最佳实践:使用有意义的名称,避免使用保留字,保持命名一致性(如全部小写或使用下划线分隔单词)。
3.2.2 查看数据库
MySQL提供了多种方法来查看现有的数据库。
列出所有数据库
使用SHOW DATABASES
命令列出服务器上的所有数据库:
SHOW DATABASES;
输出示例:
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| mydb |
+--------------------+
注意:用户只能看到有权限访问的数据库。
筛选数据库列表
可以使用LIKE
子句筛选数据库名称:
SHOW DATABASES LIKE 'my%';
这将显示所有以"my"开头的数据库。
查看数据库创建语句
要查看创建特定数据库的SQL语句,可以使用SHOW CREATE DATABASE
:
SHOW CREATE DATABASE mydb;
输出示例:
+----------+------------------------------------------------------------------+
| Database | Create Database |
+----------+------------------------------------------------------------------+
| mydb | CREATE DATABASE `mydb` /*!40100 DEFAULT CHARACTER SET utf8mb4 */ |
+----------+------------------------------------------------------------------+
查看数据库大小
要查看数据库的大小,可以使用以下查询:
SELECT table_schema AS 'Database',ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS 'Size (MB)'
FROM information_schema.tables
WHERE table_schema = 'mydb'
GROUP BY table_schema;
这将显示指定数据库的总大小(包括数据和索引)。
3.2.3 选择数据库
在执行表操作之前,需要选择要使用的数据库。
使用USE语句
USE
语句用于选择当前会话的默认数据库:
USE database_name;
示例:
USE mydb;
执行此命令后,所有不指定数据库的表操作都将应用于选定的数据库。
查看当前数据库
要查看当前选择的数据库,可以使用以下命令:
SELECT DATABASE();
输出示例:
+------------+
| DATABASE() |
+------------+
| mydb |
+------------+
不切换数据库的操作
也可以在不切换当前数据库的情况下操作其他数据库中的表,方法是在表名前加上数据库名和点:
SELECT * FROM database_name.table_name;
示例:
SELECT * FROM mysql.user;
这将查询mysql
数据库中的user
表,而不改变当前选择的数据库。
3.2.4 修改数据库
MySQL允许修改现有数据库的某些属性,如字符集和排序规则。
修改数据库字符集
使用ALTER DATABASE
语句修改数据库的默认字符集:
ALTER DATABASE database_name
CHARACTER SET charset_name;
示例:
ALTER DATABASE mydb
CHARACTER SET utf8mb4;
修改数据库排序规则
修改数据库的默认排序规则:
ALTER DATABASE database_name
COLLATE collation_name;
示例:
ALTER DATABASE mydb
COLLATE utf8mb4_unicode_ci;
同时修改字符集和排序规则
ALTER DATABASE database_name
CHARACTER SET charset_name
COLLATE collation_name;
示例:
ALTER DATABASE mydb
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
注意:修改数据库的字符集和排序规则不会自动转换现有表和列的字符集和排序规则。需要单独修改每个表和列。
3.2.5 删除数据库
当不再需要某个数据库时,可以使用DROP DATABASE
语句将其删除。
基本语法
DROP DATABASE [IF EXISTS] database_name;
参数说明:
IF EXISTS
:可选,如果数据库不存在,则不会报错
示例
删除数据库:
DROP DATABASE mydb;
删除数据库(如果存在):
DROP DATABASE IF EXISTS mydb;
警告:
DROP DATABASE
会永久删除数据库及其所有表和数据。此操作不可逆,执行前应确保有备份或确实不再需要该数据库。
3.2.6 数据库权限管理
MySQL使用权限系统控制用户对数据库的访问。
创建用户并授予数据库权限
创建新用户并授予特定数据库的权限:
-- 创建用户
CREATE USER 'username'@'hostname' IDENTIFIED BY 'password';-- 授予所有权限
GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'hostname';-- 授予特定权限
GRANT SELECT, INSERT, UPDATE, DELETE ON database_name.* TO 'username'@'hostname';-- 使权限生效
FLUSH PRIVILEGES;
查看用户权限
查看用户对数据库的权限:
SHOW GRANTS FOR 'username'@'hostname';
撤销权限
撤销用户对数据库的权限:
REVOKE ALL PRIVILEGES ON database_name.* FROM 'username'@'hostname';
FLUSH PRIVILEGES;
3.2.7 数据库备份与恢复
定期备份数据库是数据安全的重要措施。
使用mysqldump备份数据库
mysqldump
是MySQL提供的命令行工具,用于创建数据库备份:
# 备份单个数据库
mysqldump -u username -p database_name > backup_file.sql# 备份多个数据库
mysqldump -u username -p --databases db1 db2 > backup_file.sql# 备份所有数据库
mysqldump -u username -p --all-databases > backup_file.sql
恢复数据库备份
使用以下命令恢复数据库备份:
# 恢复单个数据库(数据库必须已存在)
mysql -u username -p database_name < backup_file.sql# 恢复多个或所有数据库
mysql -u username -p < backup_file.sql
3.2.8 数据库最佳实践
以下是一些数据库管理的最佳实践:
-
使用有意义的命名:数据库名称应反映其用途或内容。
-
使用适当的字符集:对于多语言应用,建议使用
utf8mb4
字符集,它支持所有Unicode字符(包括表情符号)。 -
定期备份:建立定期备份计划,并测试恢复过程。
-
遵循最小权限原则:只授予用户必要的权限,避免过度授权。
-
记录数据库设计:维护数据库设计文档,包括表结构、关系和索引。
-
监控数据库大小:定期检查数据库大小,及时清理不必要的数据或优化存储。
-
使用版本控制:将数据库结构变更脚本纳入版本控制系统。
-
环境隔离:为开发、测试和生产环境使用不同的数据库。
通过掌握数据库的基本操作,您可以有效地组织和管理MySQL中的数据。数据库操作是MySQL使用的基础,为后续的表操作和数据管理奠定了基础。