MySQL命令行操作详解
以下是 MySQL 命令行操作的常用命令及示例说明,覆盖了数据库管理、表操作、权限控制等核心场景,按功能分类整理,供大家参考:
一、连接与退出
连接 MySQL 服务器
mysql -u 用户名 -p
示例:
mysql -u root -p # -u 指定用户名为 root,-p 表示需要输入密码
退出 MySQL
exit; -- 退出 MySQL 命令行(也可用 \q 或 Ctrl+D)
二、数据库管理
显示所有数据库
SHOW DATABASES; -- 列出当前 MySQL 服务器中所有数据库
创建数据库
CREATE DATABASE 数据库名; -- 创建一个新数据库
示例:
CREATE DATABASE testdb; -- 创建名为 testdb 的数据库
选择数据库
USE 数据库名; -- 切换操作上下文到指定数据库
示例:
USE testdb; -- 后续操作默认在 testdb 数据库执行
删除数据库
DROP DATABASE 数据库名; -- 彻底删除数据库(谨慎操作!)
示例:
DROP DATABASE olddb; -- 删除名为 olddb 的数据库
三、表操作
显示当前数据库所有表
SHOW TABLES; -- 列出当前数据库中的所有表
创建表
CREATE TABLE 表名 (列定义); -- 定义表结构(列名、类型、约束等)
示例:
CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, -- 自增主键,唯一标识每行 name VARCHAR(50), -- 用户名,最大 50 字符 email VARCHAR(100) -- 邮箱,最大 100 字符 );
查看表结构
DESC 表名; -- 显示表的列名、类型、是否允许 NULL 等详细信息
示例:
DESC users; -- 查看 users 表的结构
修改表结构(添加列)
ALTER TABLE 表名 ADD 列名 数据类型; -- 向表中添加新列
示例:
ALTER TABLE users ADD age INT; -- 添加 age 列,类型为整数
删除表
DROP TABLE 表名; -- 彻底删除表及其数据(不可恢复!)
示例:
DROP TABLE temp_users; -- 删除名为 temp_users 的表
四、数据操作(CRUD)
插入数据
INSERT INTO 表名 (列1, 列2) VALUES (值1, 值2); -- 插入一行数据
示例:
INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com'); -- 插入 name 为 Alice、email 为 alice@example.com 的记录
查询数据
SELECT 列1, 列2 FROM 表名 [WHERE 条件]; -- 查询满足条件的数据
示例:
SELECT * FROM users WHERE name LIKE 'A%'; -- 查询所有 name 以 A 开头的用户(* 表示返回所有列)
更新数据
UPDATE 表名 SET 列名=新值 [WHERE 条件]; -- 修改符合条件的记录
示例:
UPDATE users SET email='bob@new.com' WHERE id=2; -- 将 id=2 的用户的 email 更新为 bob@new.com
删除数据
DELETE FROM 表名 [WHERE 条件]; -- 删除符合条件的记录(无 WHERE 会清空表!)
示例:
DELETE FROM users WHERE age < 18; -- 删除所有 age 小于 18 的用户
五、索引与约束
创建索引
CREATE INDEX 索引名 ON 表名 (列名); -- 为列创建索引,加速查询
示例:
CREATE INDEX idx_email ON users (email); -- 为 email 列创建索引
添加主键约束
ALTER TABLE 表名 ADD PRIMARY KEY (列名); -- 将列设为主键(唯一且非空)
示例:
ALTER TABLE orders ADD PRIMARY KEY (order_id); -- 设置 order_id 为主键
六、用户与权限
创建用户
CREATE USER '用户名'@'主机' IDENTIFIED BY '密码'; -- 创建新用户并设置密码
示例:
CREATE USER 'dev'@'localhost' IDENTIFIED BY '123456'; -- 创建用户 dev,仅允许从本地登录,密码为 123456
授权
GRANT 权限 ON 数据库.表 TO '用户'@'主机'; -- 授予用户特定权限
示例:
GRANT SELECT, INSERT ON testdb.* TO 'dev'@'localhost'; -- 允许 dev 用户在 testdb 所有表上执行 SELECT 和 INSERT
撤销权限
REVOKE 权限 ON 数据库.表 FROM '用户'@'主机'; -- 撤销用户权限
示例:
REVOKE DELETE ON testdb.* FROM 'dev'@'localhost'; -- 禁止 dev 用户在 testdb 所有表上执行 DELETE
刷新权限
FLUSH PRIVILEGES; -- 使权限修改立即生效(授权或撤销后建议执行)
七、备份与恢复
导出数据库(命令行)
mysqldump -u 用户名 -p 数据库名 > 文件名.sql -- 将数据库导出为 SQL 文件
示例:
mysqldump -u root -p testdb > backup.sql # 导出 testdb 数据库到 backup.sql 文件(需输入密码)
导入 SQL 文件
SOURCE 文件路径; -- 执行 SQL 文件中的命令(用于恢复数据)
示例:
SOURCE /home/user/backup.sql; -- 导入 backup.sql 文件到当前数据库
八、事务管理
开启事务
START TRANSACTION; -- 开始一个事务(后续操作可回滚)
提交事务
COMMIT; -- 提交事务,确认所有修改
回滚事务
ROLLBACK; -- 撤销事务内的所有未提交操作
示例:
START TRANSACTION; UPDATE accounts SET balance = balance - 100 WHERE id=1; -- 账户1扣款100 UPDATE accounts SET balance = balance + 100 WHERE id=2; -- 账户2收款100 COMMIT; -- 若两条更新均成功,提交事务(否则用 ROLLBACK 回滚)
九、其他实用命令
显示服务器状态
SHOW STATUS; -- 查看 MySQL 服务器运行状态(连接数、查询次数等)
查看正在执行的进程
SHOW PROCESSLIST; -- 显示当前所有客户端连接及执行的 SQL
查看建表语句
SHOW CREATE TABLE 表名; -- 显示创建表的完整 SQL 语句
优化表(碎片整理)
OPTIMIZE TABLE 表名; -- 整理表碎片,回收未使用空间(适用于频繁修改的表)
十、高级功能
存储过程
DELIMITER $$ -- 修改分隔符为 $$(避免与 SQL 语句中的 ; 冲突) CREATE PROCEDURE 存储过程名() BEGIN -- SQL 逻辑 END $$ DELIMITER ; -- 恢复分隔符为 ;
示例:
DELIMITER $$ CREATE PROCEDURE GetUsers() BEGIN SELECT * FROM users; -- 定义存储过程:查询所有用户 END $$ DELIMITER ; -- 调用存储过程:CALL GetUsers();