mysql命令语句大全
MySQL的令语日常操作,八成时间耗在十来条命令上。令语剩下的令语两成,才是令语那些让新手抓狂、老手拍大腿的令语进阶写法。别指望背完所有命令,令语你只需要掌握一套能应对99%场景的令语骨架,剩下的令语,查文档都比硬记快。令语
连接与库表操作
先解决怎么进门。令语mysql -u root -p 是令语标准姿势,但很多人不知道加 -h 指定远程主机时,令语后面要跟端口,令语像 mysql -h 192.168.1.10 -P 3306 -u root -p。令语进门之后第一件事,令语看有哪些库:SHOW DATABASES;。选库用 USE db_name;,别漏了分号,漏了它,MySQL会一直等你输入下一行,像个耐心过头的客服。
建表是另一个坑。我见过有人用 CREATE TABLE t (id INT, name VARCHAR(50)); 建完就后悔,因为没设主键。正经写法是 CREATE TABLE user (id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL); 这行命令里藏了三个常识:主键唯一、自增省心、NOT NULL防止脏数据。改表结构用 ALTER TABLE,加列 ADD COLUMN age INT,删列 DROP COLUMN age,改类型 MODIFY COLUMN name VARCHAR(100)——注意,MODIFY会覆盖原有属性,写漏了NOT NULL就等着数据变NULL吧。
增删改查:CRUD的肌肉记忆
查询是重头戏。SELECT * FROM user; 这种写法,性能极差,但开发环境无所谓。生产环境你得学会 SELECT id, name FROM user WHERE status = 1 ORDER BY created_at DESC LIMIT 20; 这条命令里,WHERE 过滤行,ORDER BY 排序,LIMIT 限制返回条数。三个词按顺序写,错了就报语法错误,MySQL在这点上很较真。
插入数据,INSERT INTO user (name, age) VALUES ('张三', 25); 注意列名和值要一一对应。批量插入时,用逗号分隔多组值:INSERT INTO user (name) VALUES ('李四'), ('王五'); 这比循环执行单条插入快十倍不止,尤其在脚本里。
更新和删除,最怕忘加WHERE。UPDATE user SET age = 26 WHERE name = '张三'; 一旦漏了WHERE,全表都被改。删除同理,DELETE FROM user WHERE id = 5; 但清空表用 TRUNCATE TABLE user; 更快,它不记录逐行删除日志,直接重置表。代价是——无法回滚。手一抖,数据就没了,比DELETE还绝。
进阶:JOIN、聚合与索引
单表玩腻了,才轮到JOIN。SELECT u.name, o.order_no FROM user u JOIN orders o ON u.id = o.user_id; 这里 u 和 o 是别名,省得写全表名。LEFT JOIN 和 INNER JOIN 的区别,用一次就懂:INNER只留两边都匹配的,LEFT保留左表全部,右表没匹配的填NULL。做报表时LEFT JOIN用得最多,因为你要的是“所有用户,哪怕他没下过单”。
聚合函数 COUNT、SUM、AVG 配 GROUP BY 用。比如统计每个用户的订单数:SELECT user_id, COUNT(*) FROM orders GROUP BY user_id; 想过滤分组后的结果,不能用WHERE,得用 HAVING COUNT(*) > 2; 这个坑,新手必踩,老手也偶尔犯迷糊。
索引是性能的救星。CREATE INDEX idx_user_name ON user(name); 建完你会发现,带WHERE name='张三'的查询,从全表扫描变成索引查找,快得飞起。但别滥用,索引占空间,写入时还要维护,一张表超过三四个索引就该反思了。
管理命令与防坑技巧
看表结构用 DESC user;,比SHOW CREATE TABLE简洁。导出数据,命令行下 mysqldump -u root -p db_name > backup.sql,导入时 mysql -u root -p db_name < backup.sql。这两条命令,是备份恢复的底线,建议刻进肌肉记忆。
最后说个冷门的。SHOW PROCESSLIST; 能看到当前所有连接在跑什么SQL。有一次线上卡死,我执行这条命令,发现有个查询跑了三小时,锁住了整张表。KILL掉那个线程ID,世界瞬间清净。这条命令,比任何优化技巧都救命。
MySQL命令不复杂,复杂的是数据之间的关系和你的业务逻辑。命令是死的,用的时候别死背,多想想它背后在做什么——全表扫描还是索引查找,行锁还是表锁,事务提交没提交。想明白了,命令自然就记住了。
