分享|MySQL 完整操作命令大全
匿名用户
781
2025.07.14
2025.07.14
发布于 广东

MySQL 完整操作命令大全

一、基础操作

1. 数据库操作

-- 创建数据库
CREATE DATABASE db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 删除数据库
DROP DATABASE db_name;

-- 修改数据库字符集
ALTER DATABASE db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

2. 表操作

-- 创建表
CREATE TABLE table_name (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    INDEX idx_name (name)
) ENGINE=InnoDB;

-- 修改表结构
ALTER TABLE table_name ADD COLUMN new_column VARCHAR(255) AFTER existing_column;
ALTER TABLE table_name MODIFY COLUMN column_name VARCHAR(500);
ALTER TABLE table_name DROP COLUMN column_name;
ALTER TABLE table_name RENAME TO new_table_name;

-- 清空表
TRUNCATE TABLE table_name;

二、数据操作

1. CRUD操作

-- 插入数据
INSERT INTO table_name (col1, col2) VALUES (val1, val2), (val3, val4);

-- 更新数据
UPDATE table_name SET col1 = val1 WHERE condition;

-- 删除数据
DELETE FROM table_name WHERE condition;

-- 查询数据
SELECT * FROM table_name WHERE condition LIMIT 10 OFFSET 5;
SELECT col1, col2 FROM table_name ORDER BY col1 DESC;
SELECT COUNT(*) FROM table_name;
SELECT DISTINCT col1 FROM table_name;

2. 高级查询

-- 连接查询
SELECT a.*, b.* FROM table_a a JOIN table_b b ON a.id = b.a_id;

-- 子查询
SELECT * FROM table_name WHERE id IN (SELECT id FROM other_table);

-- 分组聚合
SELECT department, COUNT(*), AVG(salary) 
FROM employees 
GROUP BY department 
HAVING COUNT(*) > 5;

-- 窗口函数(MySQL 8.0+)
SELECT name, salary, 
       RANK() OVER (PARTITION BY department ORDER BY salary DESC) as rank
FROM employees;

三、索引管理

-- 创建索引
CREATE INDEX idx_name ON table_name(column1, column2);
CREATE UNIQUE INDEX idx_unique ON table_name(column);

-- 删除索引
DROP INDEX idx_name ON table_name;

-- 查看索引使用情况
EXPLAIN SELECT * FROM table_name WHERE indexed_column = 'value';

-- 强制使用索引
SELECT * FROM table_name FORCE INDEX (idx_name) WHERE condition;

四、事务与锁

1. 事务控制

-- 开始事务
START TRANSACTION;

-- 提交/回滚
COMMIT;
ROLLBACK;

-- 设置隔离级别
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

2. 锁管理

-- 手动加锁
SELECT * FROM table_name WHERE id = 1 FOR UPDATE;  -- 排他锁
SELECT * FROM table_name WHERE id = 1 LOCK IN SHARE MODE;  -- 共享锁

-- 查看锁状态
SHOW OPEN TABLES WHERE In_use > 0;
SELECT * FROM performance_schema.data_locks;
SELECT * FROM sys.innodb_lock_waits;

-- 杀死进程释放锁
SHOW PROCESSLIST;
KILL process_id;

五、备份与恢复

1. 数据导出

# 导出整个数据库
mysqldump -u username -p db_name > backup.sql

# 导出特定表
mysqldump -u username -p db_name table1 table2 > tables.sql

# 导出结构不导出数据
mysqldump -u username -p --no-data db_name > schema.sql

# 导出为CSV
mysql -u username -p -e "SELECT * FROM table_name" db_name > output.csv

2. 数据导入

# 导入SQL文件
mysql -u username -p db_name < backup.sql

# 导入CSV文件
mysqlimport -u username -p --fields-terminated-by=, --lines-terminated-by="\n" db_name file.csv

# 从SQL文件恢复单个表
mysql -u username -p db_name < table_dump.sql

六、性能优化

1. 监控与诊断

-- 查看慢查询
SHOW VARIABLES LIKE 'slow_query_log%';
SELECT * FROM mysql.slow_log;

-- 查看当前连接
SHOW STATUS LIKE 'Threads%';

-- 查看缓存命中率
SHOW STATUS LIKE 'Qcache%';

-- 查看InnoDB状态
SHOW ENGINE INNODB STATUS\G

2. 优化操作

-- 分析表
ANALYZE TABLE table_name;

-- 优化表
OPTIMIZE TABLE table_name;

-- 重建表
ALTER TABLE table_name ENGINE=InnoDB;

-- 刷新权限
FLUSH PRIVILEGES;

-- 重置查询缓存
RESET QUERY CACHE;

七、用户与权限

-- 创建用户
CREATE USER 'username'@'host' IDENTIFIED BY 'password';

-- 修改密码
ALTER USER 'username'@'host' IDENTIFIED BY 'new_password';

-- 授权
GRANT SELECT, INSERT ON db_name.* TO 'username'@'host';

-- 撤销权限
REVOKE INSERT ON db_name.* FROM 'username'@'host';

-- 查看权限
SHOW GRANTS FOR 'username'@'host';

-- 删除用户
DROP USER 'username'@'host';

八、高级功能

1. 存储过程

DELIMITER //
CREATE PROCEDURE procedure_name(IN param INT)
BEGIN
    DECLARE var INT;
    SELECT COUNT(*) INTO var FROM table_name;
    IF var > param THEN
        INSERT INTO log_table VALUES ('Threshold exceeded');
    END IF;
END //
DELIMITER ;

-- 调用
CALL procedure_name(10);

2. 触发器

CREATE TRIGGER trigger_name
BEFORE INSERT ON table_name
FOR EACH ROW
BEGIN
    IF NEW.amount < 0 THEN
        SET NEW.amount = 0;
    END IF;
END;

3. 分区表

-- 创建分区表
CREATE TABLE partitioned_table (
    id INT,
    created_at DATETIME
) PARTITION BY RANGE (YEAR(created_at)) (
    PARTITION p0 VALUES LESS THAN (2020),
    PARTITION p1 VALUES LESS THAN (2021),
    PARTITION pmax VALUES LESS THAN MAXVALUE
);

-- 添加分区
ALTER TABLE partitioned_table ADD PARTITION (PARTITION p2 VALUES LESS THAN (2022));

九、系统维护

1. 变量设置

-- 查看变量
SHOW VARIABLES LIKE '%buffer%';

-- 设置全局变量
SET GLOBAL max_connections = 200;

-- 设置会话变量
SET SESSION sql_mode = 'STRICT_TRANS_TABLES';

2. 日志管理

-- 查看日志状态
SHOW VARIABLES LIKE '%log%';

-- 开启二进制日志
SET GLOBAL log_bin = ON;

-- 刷新日志
FLUSH LOGS;

3. 数据字典(MySQL 8.0+)

-- 查看表信息
SELECT * FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'db_name';

-- 查看列信息
SELECT * FROM information_schema.COLUMNS WHERE TABLE_NAME = 'table_name';

-- 查看约束
SELECT * FROM information_schema.TABLE_CONSTRAINTS;

这份完整指南涵盖了MySQL从基础到高级的常用操作命令,适用于日常开发、维护和面试准备。实际使用时请根据MySQL版本和具体环境调整命令。

评论 (0)