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

6次阅读

mysql高频操作围绕“连得上、查得到、改得对、跑得稳”展开:连接需确认地址端口及user()/current_user()差异;查询须use库、desc表、加limit;增改须显式字段、先查后改、分批处理;慢查定位靠show processlist和performance_schema。

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

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; 看缺哪条,比如少了 SELECTEXECUTE

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 是否为 rangeref

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 dataLocked 或长时间 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 很老实,你糊弄它,它就用锁、超时、空结果来提醒你。

text=ZqhQzanResources