Mysql数据库命令
#用CV工程师的方式逃离CV#我的毕业设计是《活着》#从开发到测试的文明退化史
数据库基础命令总结笔记(MySQL)
1. 连接与退出
mysql -u root -p -- 登录(回车后输入密码)
exit; 或 quit; 或 \q -- 退出2. 数据库操作(DDL)
SHOW DATABASES; -- 查看所有数据库
CREATE DATABASE db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- 创建数据库
USE db_name; -- 切换到指定数据库
DROP DATABASE IF EXISTS db_name; -- 删除数据库(建议加 IF EXISTS)3. 数据表操作(DDL)
SHOW TABLES; -- 查看当前库所有表
SHOW TABLES FROM db_name; -- 查看指定库的表
CREATE TABLE table_name ( -- 创建表示例
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
age TINYINT UNSIGNED DEFAULT 0,
email VARCHAR(100) UNIQUE,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
DESCRIBE table_name; -- 查看表结构(简写 DESC table_name)
SHOW CREATE TABLE table_name\G -- 查看完整建表语句(推荐加\G垂直显示)
-- 修改表结构
ALTER TABLE table_name ADD COLUMN phone VARCHAR(20); -- 加列
ALTER TABLE table_name MODIFY COLUMN age INT; -- 修改列类型
ALTER TABLE table_name CHANGE old_col new_col VARCHAR(100); -- 修改列名
ALTER TABLE table_name DROP COLUMN phone; -- 删除列
DROP TABLE IF EXISTS table_name; -- 删除表
TRUNCATE TABLE table_name; -- 清空表数据(不可回滚)4. 数据操作(DML)
-- 插入
INSERT INTO table_name (name, age) VALUES ('张三', 25);
INSERT INTO table_name VALUES (NULL, '李四', 30, 'li@example.com', NOW());
-- 查询
SELECT * FROM table_name;
SELECT name, age FROM table_name WHERE age >= 18 ORDER BY age DESC LIMIT 10;
-- 更新
UPDATE table_name SET age = age + 1, email = 'new@qq.com' WHERE id = 1;
-- 删除
DELETE FROM table_name WHERE id = 1;
DELETE FROM table_name; -- 删除所有数据(可回滚)5. 查询条件与运算符
WHERE id = 1
WHERE name LIKE '%三%' -- 模糊匹配
WHERE age IN (20, 25, 30)
WHERE age BETWEEN 20 AND 30
WHERE created_at >= '2025-01-01' AND created_at < '2025-02-01'
WHERE is_deleted = 0 -- 逻辑删除常用6. 排序、分页、去重
ORDER BY id DESC -- 降序(ASC 为升序)
LIMIT 10 OFFSET 20 -- 分页:第3页,每页10条((3-1)*10)
LIMIT 20, 10 -- 同上,旧写法
SELECT DISTINCT name FROM table_name; -- 去重7. 聚合函数
COUNT(*)、COUNT(1)、COUNT(column)
MAX(age)、MIN(age)、AVG(age)、SUM(salary)8. 分组与筛选
SELECT department, COUNT(*) AS num
FROM employees
GROUP BY department
HAVING num > 5
ORDER BY num DESC;9. 多表连接(JOIN)
SELECT * FROM A INNER JOIN B ON A.id = B.a_id; -- 内连接
SELECT * FROM A LEFT JOIN B ON A.id = B.a_id; -- 左连接(保留A所有)
SELECT * FROM A RIGHT JOIN B ON A.id = B.a_id; -- 右连接
SELECT * FROM A FULL OUTER JOIN B ON A.id = B.a_id; -- 全外连接(MySQL需用UNION模拟)10. 事务控制
START TRANSACTION; -- 或 BEGIN;
UPDATE account SET balance = balance - 100 WHERE id = 1;
UPDATE account SET balance = balance + 100 WHERE id = 2;
COMMIT; -- 提交
-- ROLLBACK; -- 出错时回滚11. 索引操作
CREATE INDEX idx_name ON table_name(name); -- 普通索引
CREATE UNIQUE INDEX idx_email ON table_name(email); -- 唯一索引
SHOW INDEX FROM table_name; -- 查看索引
DROP INDEX idx_name ON table_name; -- 删除索引12. 用户与权限管理
CREATE USER 'user'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON db_name.* TO 'user'@'%';
REVOKE ALL PRIVILEGES ON db_name.* FROM 'user'@'%';
FLUSH PRIVILEGES; -- 刷新权限13. 常用系统命令(MySQL客户端内)
STATUS; -- 当前连接状态
SHOW PROCESSLIST; -- 查看所有连接(KILL id; 可杀进程)
SHOW VARIABLES LIKE 'time_zone';
SHOW ENGINE INNODB STATUS\G -- 查看InnoDB引擎状态
SELECT VERSION(); -- 查看MySQL版本14. 备份与恢复(命令行)
# 备份
mysqldump -u root -p db_name > db_name.sql -- 单个库
mysqldump -u root -p --all-databases > all_databases.sql -- 所有库
# 恢复
mysql -u root -p db_name < db_name.sql