MySQL 常用命令及技巧
连接与登录
连接MySQL服务器
1 2 3 4 5 6 7 8
| mysql -u root -p
mysql -h 127.0.0.1 -P 3306 -u root -p
mysql -u root -p -D database_name
|
退出MySQL
数据库操作
创建数据库
1 2 3 4 5 6 7 8
| CREATE DATABASE database_name;
CREATE DATABASE database_name DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE DATABASE IF NOT EXISTS database_name;
|
查看数据库
1 2 3 4 5
| SHOW DATABASES;
SHOW CREATE DATABASE database_name;
|
切换数据库
删除数据库
1 2 3 4 5
| DROP DATABASE database_name;
DROP DATABASE IF EXISTS database_name;
|
表操作
创建表
1 2 3 4 5 6 7
| CREATE TABLE table_name ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL, email VARCHAR(100) UNIQUE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
查看表结构
1 2 3 4 5 6 7 8 9
| DESC table_name; DESCRIBE table_name;
SHOW CREATE TABLE table_name;
SHOW TABLES;
|
修改表结构
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| ALTER TABLE table_name ADD COLUMN column_name VARCHAR(100);
ALTER TABLE table_name MODIFY COLUMN column_name INT NOT NULL;
ALTER TABLE table_name DROP COLUMN column_name;
ALTER TABLE old_table_name RENAME TO new_table_name;
RENAME TABLE old_table_name TO new_table_name;
ALTER TABLE table_name ADD INDEX index_name (column_name);
ALTER TABLE table_name ADD UNIQUE INDEX unique_index_name (column_name);
ALTER TABLE table_name DROP INDEX index_name;
|
删除表
1 2 3 4 5 6 7 8
| DROP TABLE table_name;
DROP TABLE IF EXISTS table_name;
TRUNCATE TABLE table_name;
|
数据操作(CRUD)
插入数据
1 2 3 4 5 6 7 8 9 10 11 12
| INSERT INTO table_name (column1, column2) VALUES (value1, value2);
INSERT INTO table_name (column1, column2) VALUES (value1, value2), (value3, value4), (value5, value6);
INSERT INTO table1 (column1, column2) SELECT column1, column2 FROM table2;
|
查询数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| SELECT * FROM table_name;
SELECT column1, column2 FROM table_name;
SELECT * FROM table_name WHERE condition;
SELECT * FROM table_name ORDER BY column1 ASC, column2 DESC;
SELECT * FROM table_name LIMIT 10; SELECT * FROM table_name LIMIT 5, 10;
SELECT column1, COUNT(*) FROM table_name GROUP BY column1;
SELECT column1, COUNT(*) FROM table_name GROUP BY column1 HAVING COUNT(*) > 1;
SELECT DISTINCT column1 FROM table_name;
|
更新数据
1 2 3 4 5
| UPDATE table_name SET column1 = value1, column2 = value2 WHERE condition;
UPDATE table_name SET column1 = value1 WHERE id IN (1, 2, 3);
|
删除数据
1 2 3 4 5
| DELETE FROM table_name WHERE condition;
DELETE FROM table_name;
|
高级查询
连接查询
1 2 3 4 5 6 7 8 9 10 11
| SELECT * FROM table1 INNER JOIN table2 ON table1.id = table2.table1_id;
SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.table1_id;
SELECT * FROM table1 RIGHT JOIN table2 ON table1.id = table2.table1_id;
SELECT a.*, b.* FROM table1 a, table1 b WHERE a.parent_id = b.id;
|
子查询
1 2 3 4 5 6 7 8
| SELECT * FROM table1 WHERE id IN (SELECT table1_id FROM table2);
SELECT * FROM (SELECT * FROM table1 WHERE condition) AS temp;
SELECT * FROM table1 WHERE EXISTS (SELECT 1 FROM table2 WHERE table2.table1_id = table1.id);
|
联合查询
1 2 3 4 5 6 7 8 9
| SELECT column1 FROM table1 UNION SELECT column1 FROM table2;
SELECT column1 FROM table1 UNION ALL SELECT column1 FROM table2;
|
索引操作
创建索引
1 2 3 4 5 6 7 8 9 10 11
| CREATE INDEX index_name ON table_name (column_name);
CREATE UNIQUE INDEX unique_index_name ON table_name (column_name);
CREATE INDEX index_name ON table_name (column1, column2);
CREATE FULLTEXT INDEX fulltext_index_name ON table_name (column_name);
|
查看索引
1 2
| SHOW INDEX FROM table_name;
|
删除索引
1 2
| DROP INDEX index_name ON table_name;
|
用户与权限管理
用户管理
1 2 3 4 5 6 7 8 9 10 11
| CREATE USER 'username'@'host' IDENTIFIED BY 'password';
DROP USER 'username'@'host';
ALTER USER 'username'@'host' IDENTIFIED BY 'new_password';
SET PASSWORD FOR 'username'@'host' = PASSWORD('new_password');
|
权限管理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'host';
GRANT SELECT, INSERT, UPDATE ON database_name.* TO 'username'@'host';
GRANT ALL PRIVILEGES ON *.* TO 'username'@'host';
FLUSH PRIVILEGES;
REVOKE ALL PRIVILEGES ON database_name.* FROM 'username'@'host';
SHOW GRANTS FOR 'username'@'host';
|
事务管理
事务操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| START TRANSACTION;
BEGIN;
COMMIT;
ROLLBACK;
SAVEPOINT savepoint_name;
ROLLBACK TO SAVEPOINT savepoint_name;
RELEASE SAVEPOINT savepoint_name;
|
事务隔离级别
1 2 3 4 5 6 7 8 9 10 11 12
| SELECT @@transaction_isolation;
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED; SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
备份与恢复
数据备份
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| mysqldump -u root -p database_name > backup.sql
mysqldump -u root -p --databases db1 db2 > backup.sql
mysqldump -u root -p --all-databases > backup.sql
mysqldump -u root -p --no-data database_name > backup.sql
mysqldump -u root -p --no-create-info database_name > backup.sql
|
数据恢复
1 2 3 4 5
| mysql -u root -p database_name < backup.sql
source /path/to/backup.sql;
|
性能优化
查看执行计划
1 2 3 4 5
| EXPLAIN SELECT * FROM table_name WHERE condition;
EXPLAIN FORMAT=JSON SELECT * FROM table_name WHERE condition;
|
分析表
1 2 3 4 5 6 7 8 9 10 11
| ANALYZE TABLE table_name;
CHECK TABLE table_name;
OPTIMIZE TABLE table_name;
REPAIR TABLE table_name;
|
查看性能指标
1 2 3 4 5 6 7 8 9 10 11
| SHOW VARIABLES LIKE 'slow_query%';
SHOW VARIABLES LIKE 'query_cache%';
SHOW STATUS LIKE 'Threads_connected';
SHOW VARIABLES LIKE 'max_connections';
|
常用函数
字符串函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| SELECT CONCAT('Hello', ' ', 'World');
SELECT LENGTH('Hello');
SELECT UPPER('hello'); SELECT LOWER('HELLO');
SELECT SUBSTRING('Hello World', 1, 5);
SELECT REPLACE('Hello World', 'World', 'MySQL');
SELECT TRIM(' Hello '); SELECT LTRIM(' Hello'); SELECT RTRIM('Hello ');
|
数值函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| SELECT ROUND(3.14159, 2);
SELECT CEIL(3.14);
SELECT FLOOR(3.14);
SELECT ABS(-10);
SELECT MOD(10, 3);
SELECT RAND();
|
日期函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| SELECT NOW(); SELECT CURDATE(); SELECT CURTIME();
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s');
SELECT DATE_ADD(NOW(), INTERVAL 7 DAY); SELECT DATE_SUB(NOW(), INTERVAL 1 MONTH);
SELECT DATEDIFF('2024-12-31', '2024-01-01');
SELECT YEAR(NOW()); SELECT MONTH(NOW()); SELECT DAY(NOW());
|
聚合函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| SELECT COUNT(*) FROM table_name;
SELECT SUM(column_name) FROM table_name;
SELECT AVG(column_name) FROM table_name;
SELECT MAX(column_name) FROM table_name;
SELECT MIN(column_name) FROM table_name;
|
实用技巧
批量插入优化
1 2 3 4 5 6 7 8 9 10
| INSERT INTO table_name (column1, column2) VALUES (value1, value2), (value3, value4);
LOAD DATA INFILE '/path/to/file.csv' INTO TABLE table_name FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n';
|
查询优化技巧
1 2 3 4 5 6 7 8 9 10 11 12 13
| SELECT indexed_column FROM table_name WHERE condition;
SELECT column1, column2 FROM table_name;
SELECT * FROM table_name LIMIT offset, page_size;
SELECT * FROM table1 WHERE EXISTS ( SELECT 1 FROM table2 WHERE table2.id = table1.id );
|
字符集与排序规则
1 2 3 4 5 6 7 8 9 10 11
| SHOW VARIABLES LIKE 'character%';
SHOW VARIABLES LIKE 'collation%';
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE table_name MODIFY column_name VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
查看MySQL状态
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| SELECT VERSION();
SELECT DATABASE();
SELECT USER();
SHOW STATUS;
SHOW VARIABLES;
|
常见问题解决
忘记root密码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| sudo systemctl stop mysql
sudo mysqld_safe --skip-grant-tables &
mysql -u root
FLUSH PRIVILEGES; ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
sudo systemctl restart mysql
|
修复损坏的表
1 2 3 4 5 6 7 8 9 10 11
| CHECK TABLE table_name;
ANALYZE TABLE table_name;
REPAIR TABLE table_name;
OPTIMIZE TABLE table_name;
|
查看锁信息
1 2 3 4 5 6 7 8 9 10 11 12
| SHOW OPEN TABLES WHERE In_use > 0;
SELECT * FROM information_schema.INNODB_LOCKS; SELECT * FROM information_schema.INNODB_LOCK_WAITS;
SHOW PROCESSLIST;
KILL process_id;
|
总结
本文整理了MySQL常用的命令和技巧,包括:
- 数据库和表的基本操作
- 数据的增删改查
- 高级查询技巧
- 索引和性能优化
- 用户权限管理
- 备份恢复
- 常用函数
- 实用技巧和问题解决
掌握这些命令和技巧,可以帮助你更高效地使用MySQL数据库。