MySQL 8.0 命令行高效操作指南:从零基础到实战精通
1. 环境准备与快速连接
在开始操作MySQL之前,我们需要确保环境配置正确。MySQL 8.0在安全机制上做了重要升级,这会影响传统的连接方式。
Windows系统连接步骤:
- 以管理员身份启动CMD(避免权限问题)
- 切换到MySQL安装目录的bin文件夹:
cd C:\Program Files\MySQL\MySQL Server 8.0\bin- 使用以下命令连接(注意密码插件变化):
mysql -u root -p --default-auth=mysql_native_passwordLinux/macOS连接方式:
mysql -u 用户名 -p注意:MySQL 8.0默认使用caching_sha2_password插件,如果遇到认证问题,可在my.cnf中添加
default_authentication_plugin=mysql_native_password
连接成功后,你会看到MySQL提示符:
mysql>2. 数据库核心操作命令
2.1 数据库管理
查看所有数据库:
SHOW DATABASES;创建新数据库(推荐UTF8MB4字符集):
CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;切换当前数据库:
USE mydb;删除数据库(谨慎操作):
DROP DATABASE mydb;2.2 表结构操作
创建表(带完整约束示例):
CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL UNIQUE, email VARCHAR(100) CHECK (email LIKE '%@%.%'), age TINYINT UNSIGNED, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) ENGINE=InnoDB;查看表结构:
DESCRIBE users; -- 或 SHOW CREATE TABLE users;修改表结构:
-- 添加列 ALTER TABLE users ADD COLUMN phone VARCHAR(15) AFTER email; -- 修改列类型 ALTER TABLE users MODIFY COLUMN age SMALLINT; -- 重命名列 ALTER TABLE users CHANGE COLUMN phone mobile VARCHAR(15);3. 数据CRUD实战技巧
3.1 高效插入数据
单条插入:
INSERT INTO users (username, email, age) VALUES ('john_doe', 'john@example.com', 28);批量插入(性能更优):
INSERT INTO users (username, email, age) VALUES ('alice', 'alice@example.com', 25), ('bob', 'bob@example.com', 30), ('charlie', 'charlie@example.com', 22);从文件导入数据:
LOAD DATA LOCAL INFILE '/path/to/users.csv' INTO TABLE users FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' IGNORE 1 ROWS;3.2 查询优化技巧
基础查询:
SELECT * FROM users WHERE age > 25;分页查询(大数据量必备):
SELECT * FROM users ORDER BY id LIMIT 10 OFFSET 20; -- MySQL 8.0+ 简化写法 SELECT * FROM users ORDER BY id LIMIT 20, 10;JSON数据处理(MySQL 8.0新特性):
-- 创建包含JSON列的表 CREATE TABLE products ( id INT AUTO_INCREMENT PRIMARY KEY, details JSON, price DECIMAL(10,2) ); -- 插入JSON数据 INSERT INTO products (details, price) VALUES ('{"name": "Laptop", "specs": {"cpu": "i7", "ram": "16GB"}}', 1299.99); -- 查询JSON字段 SELECT details->>"$.name" AS product_name, details->>"$.specs.cpu" AS cpu_type FROM products;3.3 更新与删除最佳实践
条件更新:
UPDATE users SET email = 'new_email@example.com', updated_at = NOW() WHERE username = 'john_doe';安全删除(务必带WHERE条件):
DELETE FROM users WHERE id = 100;清空表数据(不可回滚):
TRUNCATE TABLE log_data;4. 高级功能与性能优化
4.1 索引管理
创建索引:
-- 单列索引 CREATE INDEX idx_age ON users(age); -- 复合索引 CREATE INDEX idx_name_email ON users(username, email); -- 全文索引(文本搜索) CREATE FULLTEXT INDEX idx_content ON articles(content);查看索引:
SHOW INDEX FROM users;删除索引:
DROP INDEX idx_age ON users;4.2 事务处理
事务基本操作:
START TRANSACTION; INSERT INTO orders (user_id, amount) VALUES (1, 99.99); UPDATE accounts SET balance = balance - 99.99 WHERE user_id = 1; COMMIT; -- 如果出错可执行 ROLLBACK;设置事务隔离级别:
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;4.3 存储过程示例
创建简单存储过程:
DELIMITER // CREATE PROCEDURE get_user_stats(IN user_id INT) BEGIN SELECT COUNT(*) AS total_orders, SUM(amount) AS total_spent FROM orders WHERE user_id = user_id; END // DELIMITER ;调用存储过程:
CALL get_user_stats(1);5. 安全与维护
5.1 用户权限管理
创建用户:
CREATE USER 'app_user'@'%' IDENTIFIED BY 'StrongPassword123!';授予权限:
GRANT SELECT, INSERT, UPDATE ON mydb.* TO 'app_user'@'%';撤销权限:
REVOKE DELETE ON mydb.* FROM 'app_user'@'%';5.2 备份与恢复
使用mysqldump备份:
mysqldump -u root -p --single-transaction --routines --triggers mydb > mydb_backup.sql恢复备份:
mysql -u root -p mydb < mydb_backup.sql5.3 性能监控
查看运行进程:
SHOW PROCESSLIST;查看服务器状态:
SHOW STATUS LIKE 'Threads_connected'; SHOW STATUS LIKE 'Innodb_row_lock%';分析查询性能:
EXPLAIN SELECT * FROM users WHERE age > 25;