mysql常用操作有哪些_mysql基础命令总结

来源:这里教程网 时间:2026-02-28 20:50:29 作者:

MySQL 常用操作不是靠死记命令,而是围绕「连得上、查得到、改得对、跑得稳」这四件事展开。下面按真实使用频率和出错概率排序,只列真正高频、易错、有坑的点。

怎么安全连接 MySQL 并确认权限是否够用

很多问题其实卡在第一步:

mysql -u root -p
能连上,但执行
SHOW DATABASES;
Access denied
。这不是密码错了,是用户没被授权访问系统库或当前库。

连之前先看目标实例地址和端口:
mysql -h 127.0.0.1 -P 3306 -u app_user -p
(注意
-P
是大写,小写
-p
是密码)
连上后立刻执行
SELECT USER(), CURRENT_USER();
——前者是你声明的用户,后者是 MySQL 实际匹配到的账号(可能因 host 匹配规则不同而降级)
权限不足时别急着加
GRANT ALL
,先查
SHOW GRANTS FOR CURRENT_USER;
看缺哪条,比如少了
SELECT
EXECUTE

SELECT 怎么避免查慢、查空、查错库

SELECT *
在开发阶段很爽,上线后常成性能黑洞;更隐蔽的问题是默认查的是
information_schema
或当前没选库的 session,结果返回空或错数据。

执行前务必确认当前库:
SELECT DATABASE();
,如果返回
NULL
,说明没执行
USE mydb;
查表前先看结构:
DESCRIBE users;
SHOW COLUMNS FROM users;
,比猜字段名快得多
LIMIT 10
不只是防卡顿,更是防止误操作全表扫描;线上环境建议所有
SELECT
都带
LIMIT
(除非明确要全量)
模糊查询慎用
%keyword%
LIKE 'keyword%'
才能走索引;用
EXPLAIN SELECT ...
type
是否为
range
ref

INSERT / UPDATE 怎么防止丢数据或锁表

新手常以为

INSERT INTO t VALUES (...)
最安全,其实它不校验字段顺序,字段增减后极易插错列;而
UPDATE
不带
WHERE
条件是线上事故高发动作。

所有
INSERT
必须显式写字段名:
INSERT INTO users (name, email) VALUES ('a', 'a@b.c');
,否则表结构一变就错
UPDATE
操作前先
SELECT
验证条件:
SELECT id, name FROM users WHERE status = 0 LIMIT 5;
,再执行
UPDATE users SET status = 1 WHERE status = 0;
大批量更新别用单条
UPDATE
,改用
INSERT ... ON DUPLICATE KEY UPDATE
或分批次(每次 1000 行),避免长事务锁表
确认 autocommit 状态:
SELECT @@autocommit;
,值为
0
时所有 DML 都在事务里,忘了
COMMIT
就会一直挂起

如何快速定位慢查询和连接堆积

服务变慢,第一反应不该是重启 MySQL,而是看它自己在忙什么。90% 的“数据库卡”其实是某条 SQL 占满 CPU 或某个连接长期未释放。

查当前活跃连接:
SHOW PROCESSLIST;
,重点关注
State
列为
Sending data
Locked
或长时间
Sleep
的线程
查最近慢查询:
SELECT * FROM performance_schema.events_statements_summary_by_digest WHERE AVG_TIMER_WAIT > 1000000000000 ORDER BY AVG_TIMER_WAIT DESC LIMIT 5;
(单位是皮秒,1e12 ≈ 1 秒)
临时开启慢日志(不重启):
SET GLOBAL slow_query_log = 'ON'; SET GLOBAL long_query_time = 1;
,日志路径看
SELECT @@slow_query_log_file;
别依赖
SHOW FULL PROCESSLIST
抓不到的隐式锁,用
SELECT * FROM information_schema.INNODB_TRX;
看真正持有锁的事务

真正难的不是记住这些命令,而是每次执行前多问一句:这条语句在哪个库、以哪个用户身份、影响多少行、有没有事务包裹、会不会被其他连接阻塞。MySQL 很老实,你糊弄它,它就用锁、超时、空结果来提醒你。

相关推荐