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




联系方式有缘人请多多交流~

友情链接