MySQL作为最流行的开源关系型数据库管理系统之一,广泛应用于各类Web应用和企业级系统中,掌握MySQL常用命令是数据库管理员和开发人员的基本技能,涵盖了数据库的连接、操作、管理等多个方面,以下从数据库连接、数据操作、表管理、用户权限、数据备份与恢复、性能优化等多个维度,详细汇总MySQL常用命令。

数据库连接与退出
连接MySQL服务器需要使用mysql命令,基本语法为mysql -h主机名 -u用户名 -p密码
,本地连接可简化为mysql -u root -p
,输入密码后进入MySQL命令行界面,若需连接到远程服务器,需指定主机IP,如mysql -h 192.168.1.100 -u admin -p
,退出MySQL环境使用exit
或quit
命令,也可通过快捷键Ctrl+D
直接退出,连接时可通过--default-character-set=utf8
指定字符集,避免中文乱码问题。
数据库操作
数据库操作包括创建、查看、选择和删除数据库,创建数据库使用CREATE DATABASE 数据库名 [CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci]
,例如CREATE DATABASE mydb CHARACTER SET utf8mb4
,查看所有数据库命令为SHOW DATABASES
,查看特定数据库创建语句使用SHOW CREATE DATABASE 数据库名
,选择数据库通过USE 数据库名
,之后的所有操作将针对该数据库,删除数据库需谨慎,使用DROP DATABASE 数据库名
,该操作不可逆,会删除数据库中的所有数据表和数据。
数据表操作
数据表操作是MySQL核心功能之一,创建表时需定义表结构,包括字段名、数据类型、约束条件等,
CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL, email VARCHAR(100) UNIQUE, age INT DEFAULT 18, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
查看所有数据表使用SHOW TABLES
,查看表结构可通过DESCRIBE 表名
或SHOW COLUMNS FROM 表名
,修改表结构时,添加字段使用ALTER TABLE 表名 ADD 字段名 数据类型 [约束]
,删除字段用ALTER TABLE 表名 DROP 字段名
,修改字段类型或约束使用ALTER TABLE 表名 MODIFY 字段名 新数据类型 [新约束]
或CHANGE 旧字段名 新字段名 新数据类型 [新约束]
,删除表使用DROP TABLE 表名
,若需删除表并重新创建(清空数据),可使用TRUNCATE TABLE 表名
,该操作速度比DELETE FROM 表名
更快,且不触发触发器。

数据操作语言(DML)
数据操作语言包括插入、查询、更新和删除数据,插入数据使用INSERT INTO 表名 (字段1, 字段2) VALUES (值1, 值2)
,若插入所有字段,可省略字段列表,如INSERT INTO users VALUES (1, '张三', 'zhangsan@example.com', 20, NOW())
,批量插入时,可在VALUES后添加多组值,用逗号分隔,如INSERT INTO users (username, email) VALUES ('李四', 'lisi@example.com'), ('王五', 'wangwu@example.com')
,查询数据是常用操作,基础语法为SELECT 字段列表 FROM 表名 WHERE 条件 GROUP BY 分组字段 HAVING 分组条件 ORDER BY 排序字段 LIMIT 记录数
,查询年龄大于18的用户并按年龄降序排列:SELECT id, username, age FROM users WHERE age > 18 ORDER BY age DESC LIMIT 10
,更新数据使用UPDATE 表名 SET 字段1=新值1, 字段2=新值2 WHERE 条件
,注意WHERE条件不可省略,否则将更新所有记录,删除数据使用DELETE FROM 表名 WHERE 条件
,同样需指定条件,避免误删全表数据。
用户与权限管理
MySQL用户管理确保数据库安全,创建用户使用CREATE USER '用户名'@'主机' IDENTIFIED BY '密码'
,例如CREATE USER 'dev'@'localhost' IDENTIFIED BY 'DevPass123!'
,主机可以是localhost(仅本地连接)、%(任意主机)或具体IP地址,授权使用GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机'
,权限包括SELECT、INSERT、UPDATE、DELETE、ALL PRIVILEGES等,例如GRANT SELECT, INSERT ON mydb.* TO 'dev'@'localhost'
,刷新权限使授权生效,使用FLUSH PRIVILEGES
,查看用户权限可通过SHOW GRANTS FOR '用户名'@'主机'
,撤销权限使用REVOKE 权限 ON 数据库名.表名 FROM '用户名'@'主机'
,删除用户使用DROP USER '用户名'@'主机'
。
数据备份与恢复
备份是数据库管理的重要环节,使用mysqldump
工具可备份数据库,基本语法为mysqldump -u用户名 -p密码 数据库名 > 备份文件.sql
,备份所有数据库使用--all-databases
参数,备份特定表需在数据库名后添加表名,如mysqldump -u root -p mydb users > users_backup.sql
,恢复数据时,需先确保目标数据库存在,可通过mysql -u用户名 -p密码 数据库名 < 备份文件.sql
导入数据,对于大型数据库,可使用--single-transaction
参数避免锁表,如mysqldump -u root -p --single-transaction mydb > mydb_backup.sql
。
性能与维护命令
MySQL性能优化涉及多个命令,查看当前运行的进程使用SHOW PROCESSLIST
,杀死进程通过KILL 进程ID
,分析查询性能使用EXPLAIN SELECT 查询语句
,可查看查询是否使用了索引、扫描的行数等信息,优化表使用OPTIMIZE TABLE 表名
,可回收碎片空间,提升查询效率,查看服务器状态通过SHOW STATUS
,例如SHOW STATUS LIKE 'Threads%'
可查看线程相关信息,对于InnoDB引擎,可通过SHOW ENGINE INNODB STATUS
查看详细状态信息。
事务控制
事务确保数据一致性,常用命令包括START TRANSACTION
或BEGIN
开启事务,COMMIT
提交事务,ROLLBACK
回滚事务。
START TRANSACTION; UPDATE accounts SET balance = balance - 100 WHERE user_id = 1; UPDATE accounts SET balance = balance + 100 WHERE user_id = 2; COMMIT;
若执行过程中发生错误,可执行ROLLBACK
撤销所有未提交的操作,设置事务隔离级别使用SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
,常用隔离级别包括READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ、SERIALIZABLE。
索引操作
索引提升查询速度,创建索引使用CREATE INDEX 索引名 ON 表名 (字段名)
,或直接在创建表时定义索引,查看索引通过SHOW INDEX FROM 表名
,删除索引使用DROP INDEX 索引名 ON 表名
,为users表的username字段创建唯一索引:CREATE UNIQUE INDEX idx_username ON users (username)
。
相关问答FAQs
Q1: 如何忘记MySQL root密码?
A1: 若忘记root密码,可通过以下步骤重置:1. 停止MySQL服务,命令为sudo systemctl stop mysql
(Linux系统);2. 以安全模式启动MySQL,添加--skip-grant-tables
参数,如sudo mysqld_safe --skip-grant-tables &
;3. 无密码登录MySQL,使用mysql -u root
;4. 执行UPDATE mysql.user SET authentication_string=PASSWORD('新密码') WHERE User='root';
刷新权限;5. 重启MySQL服务,使用新密码登录。
Q2: 如何优化慢查询SQL?
A2: 优化慢查询SQL可从以下方面入手:1. 使用EXPLAIN
分析查询执行计划,检查是否使用了索引,如EXPLAIN SELECT * FROM users WHERE age > 30;
;2. 为WHERE、JOIN、ORDER BY等条件的字段创建合适索引;3. 避免在索引字段上使用函数或表达式,如WHERE YEAR(created_at) = 2023
会导致索引失效;4. 减少SELECT *,只查询必要字段;5. 对大表进行分页查询时,使用LIMIT offset, size
时确保offset字段有索引,或使用WHERE id > last_id LIMIT size
方式优化;6. 定期使用ANALYZE TABLE
更新表统计信息,确保优化器选择正确执行计划。