当前位置:首页 > 综合

常用的mysql命令大全

连上 MySQL 之后第一件事通常是常用看有哪些库。`SHOW DATABASES;` 这条命令我几乎每次开终端都会敲一遍,大全尤其是命令接手一台陌生服务器的时候。返回的常用列表里如果看到 `information_schema`、`performance_schema`、大全`mysql`、命令`sys` 这四个,常用说明是大全标准安装,别乱动它们。命令想切到某个库,常用用 `USE db_name;`,大全注意这里不加引号也行,命令但库名含特殊字符时得用反引号包起来。常用

建库建表这块,大全`CREATE DATABASE test_db DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;` 是命令我最常用的写法。字符集必须显式指定,不然默认 latin1 存中文会出乱码,这个坑踩过不止一次。建表的话,`CREATE TABLE users (id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP);` 这条语句里几个点值得留意:主键自增、非空约束、时间戳默认值,写业务表基本跑不掉。

查看表结构用 `DESC users;` 或者 `SHOW CREATE TABLE users;`。前者看字段类型和是否为空比较快,后者能看到完整的建表语句,包括引擎和字符集。我习惯用后者,因为能直接复制出来改改就能建新表。`SHOW INDEX FROM users;` 用来查索引,有时候发现查询慢,一查发现某个外键字段压根没建索引,加上去速度立刻不一样。

增删改查四条里,SELECT 的花样最多。`SELECT * FROM users WHERE name LIKE '张%' LIMIT 10 OFFSET 20;` 这种分页加模糊查询很常见。但注意 LIKE 以通配符开头会导致全表扫描,数据量大的时候能不用就不用。`ORDER BY created_at DESC` 配合 `LIMIT` 拿最新几条,比用子查询简洁。多表关联 `JOIN` 的时候,小表驱动大表是个经验,不过 MySQL 优化器现在也聪明了,`EXPLAIN` 一下看看执行计划更靠谱。

改数据用 `UPDATE users SET name = '张三' WHERE id = 1;`,删数据用 `DELETE FROM users WHERE id = 1;`。这两条命令的 WHERE 条件千万不能忘,我见过有人手一抖执行了不带条件的 DELETE,整张表清空,只能从备份恢复。真要清空表且不记录逐行删除日志,用 `TRUNCATE TABLE users;` 更快,但自增 ID 会重置,外键约束也可能报错。

用户和权限管理绕不开。`CREATE USER 'dev'@'localhost' IDENTIFIED BY 'password';` 建个本地用户,`GRANT SELECT, INSERT ON test_db.* TO 'dev'@'localhost';` 给特定库的读写权限。完事后 `FLUSH PRIVILEGES;` 刷新权限表。查当前用户权限用 `SHOW GRANTS FOR 'dev'@'localhost';`。生产环境别直接用 root 连应用,这是基本的安全习惯。

备份和恢复常用 `mysqldump`。`mysqldump -u root -p test_db > test_db.sql` 导出整个库,加 `--single-transaction` 参数能在 InnoDB 表上做一致性快照而不锁表。恢复就 `mysql -u root -p test_db < test_db.sql`。单表导出加表名即可,`mysqldump -u root -p test_db users > users.sql`。

查看当前连接和进程:`SHOW PROCESSLIST;` 能看到哪些线程在跑,遇到慢查询或者锁等待时,找到对应的 Id 用 `KILL 123;` 干掉。查看服务器状态 `SHOW STATUS LIKE 'Threads_connected';` 这类命令调优时用得多。`SHOW VARIABLES LIKE 'max_connections';` 查最大连接数,默认 151,高并发场景下经常要调大。

最后说个冷门但实用的:`SELECT VERSION();` 确认版本,不同版本语法差异不小,比如 MySQL 8.0 才支持窗口函数。`SHOW WARNINGS;` 在看某些命令执行后的警告信息时很有用,比如字段被截断之类的提示,不主动看就错过了。

分享到: