mysql常用命令

命令概览

  1. 数据库与表操作:创建/删除数据库、设计表结构、修改表字段等基础操作。
  2. 数据约束与查询:主键、外键、唯一性约束的设置,以及条件查询、聚合函数、连接查询等分析技巧。
  3. 用户与权限管理:用户创建、密码修改、权限分配,保障数据库安全性。
  4. 备份与恢复:逻辑备份(mysqldump)、物理备份(数据文件复制)及增量恢复方案。

一、数据库操作

  1. 查看数据库

    SHOW DATABASES;				-- 查看当前数据库所有表
    SHOW CREATE DATABASE db_name; -- 查看该数据库结构
    
  2. 创建数据库

    CREATE DATABASE db_name;  -- 默认字符集
    CREATE DATABASE db_name CHARACTER SET utf8mb4;  -- 指定字符集
    
  3. 选择数据库

    USE db_name;
    
  4. 删除数据库

    DROP DATABASE db_name;
    

二、数据表操作

  1. 查看表

    SHOW TABLES;           -- 查看当前数据库所有表
    DESC table_name;        -- 查看表结构
    SHOW CREATE TABLE table_name;  -- 查看建表语句
    
  2. 创建表

    CREATE TABLE table_name (
      id INT PRIMARY KEY AUTO_INCREMENT,  --设置主键,字填充序号
      name VARCHAR(50) NOT NULL,
      age INT,
      created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP --自动填充插入时的时间
    );
    
  3. 重命名表

    RENAME TABLE old_table TO new_table;
    -- 或
    ALTER TABLE old_table RENAME TO new_table;
    
  4. 添加列

    ALTER TABLE table_name ADD COLUMN new_column VARCHAR(100);
    
  5. 重命名列

    ALTER TABLE table_name CHANGE COLUMN old_column new_column VARCHAR(50);
    
  6. 删除列

    ALTER TABLE table_name DROP COLUMN column_name;
    
  7. 删除表

    DROP TABLE table_name;
    

三、数据约束操作

  1. 主键

    -- 建表时指定
    CREATE TABLE table_name (id INT PRIMARY KEY);
    -- 修改表添加
    ALTER TABLE table_name ADD PRIMARY KEY (column);
    
  2. 外键

    -- 建表时指定
    CREATE TABLE orders (
      order_id INT PRIMARY KEY,
      user_id INT,
      FOREIGN KEY (user_id) REFERENCES users(id)
    );
    -- 修改表添加
    ALTER TABLE orders ADD FOREIGN KEY (user_id) REFERENCES users(id);
    
  3. 唯一约束

    CREATE TABLE table_name (email VARCHAR(100) UNIQUE);
    -- 或
    ALTER TABLE table_name ADD UNIQUE (email);
    
  4. 非空约束

    CREATE TABLE table_name (name VARCHAR(50) NOT NULL);
    
  5. 默认值

    CREATE TABLE table_name (
      status INT DEFAULT 1,
      created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    );
    

四、数据操作

  1. 查看数据

    SELECT * FROM table_name;                     -- 所有数据
    SELECT column1, column2 FROM table_name;      -- 指定列
    
  2. 直接插入数据

    INSERT INTO table_name (column1, column2) VALUES (value1, value2);
    INSERT INTO table_name VALUES (value1, value2);  -- 需按列顺序
    
  3. 从查询插入数据

    INSERT INTO table_target (col1, col2)
    SELECT colA, colB FROM table_source WHERE condition;
    
  4. 更新数据

    UPDATE table_name SET column1 = value1 WHERE condition;
    
  5. 删除数据

    DELETE FROM table_name WHERE condition;  -- 删除符合条件的数据
    TRUNCATE TABLE table_name;               -- 清空表(不可恢复)
    

五、数据分析

查询顺序:

FROMWHEREGROUP BYHAVINGSELECTORDER BYLIMIT
  1. 简单查询

    SELECT * FROM tb_name;
    
  2. 去重查询

    SELECT DISTINCT col_name FROM tb_name;
    
  3. 条件查询

    WHERE age = 25
    WHERE status <> 'active'
    WHERE salary > 5000
    WHERE created_at < '2023-01-01'
    WHERE score >= 60
    WHERE quantity <= 100
    
  4. 排序查询

    ORDER BY col_name DESC;
    ORDER BY col_name ASC;
    
  5. 范围查询

    WHERE column BETWEEN value1 AND value2;  -- 包含边界值
    WHERE column IN (value1, value2, ...);    -- 匹配列表中的任意值
    WHERE column NOT IN (value1, value2, ...); -- 排除列表中的值
    
  6. 空值判断

    WHERE col_name IS NULL
    WHERE col_name IS NOT NULL
    
  7. 逻辑查询

    WHERE age > 18 AND country = 'CN'
    WHERE status = 'paid' OR status = 'shipped'
    WHERE NOT age > 30
    
  8. 模糊查询

    WHERE name LIKE '张%';      -- 姓张的人
    WHERE email LIKE '%@gmail.com';  -- Gmail 邮箱
    WHERE title LIKE '%数据库%';     -- 标题包含“数据库”
    
  9. 限制查询

    LIMIT 5; -- 前5 条
    LIMIT 20, 10;  -- 跳过前 20 条,查10条
    LIMIT 10 OFFSET 20;  -- 跳过前 20 条,查10条
    
  10. 分组聚合查询

    SELECT 分组字段, 聚合函数(字段) 
    FROM 表名  
    WHERE 过滤条件  
    GROUP BY 分组字段 
    HAVING 分组后过滤条件  
    ORDER BY 排序字段;
    

以下是 MySQL 中 常用聚合函数 的总结表格,包含功能、语法示例及注意事项:

函数 功能描述 语法示例 是否忽略 NULL 注意事项
COUNT() 统计行数或非空值的数量 COUNT(*)
COUNT(column)
COUNT(DISTINCT column)
是(除COUNT(*)外) COUNT(*) 统计所有行;COUNT(column) 忽略该列 NULL;DISTINCT 去重统计。
SUM() 计算数值列的总和 SUM(column)
SUM(DISTINCT column)
仅适用于数值类型(整数、小数),非数值列返回 0 或错误。
AVG() 计算数值列的平均值 AVG(column)
AVG(DISTINCT column)
忽略 NULL 值,结果可能包含小数;若所有值为 NULL,返回 NULL。
MAX() 获取列中的最大值 MAX(column) 适用于数值、日期、字符串类型;字符串按字典序比较。
MIN() 获取列中的最小值 MIN(column) MAX(),支持多种数据类型比较。
GROUP_CONCAT() 将分组内的值合并为字符串 GROUP_CONCAT(column [SEPARATOR '分隔符'])
GROUP_CONCAT(DISTINCT column)
默认逗号分隔;可指定分隔符(如 `SEPARATOR ’
STDDEV() 计算数值列的标准差 STDDEV(column) 返回浮点数;样本标准差用 STDDEV_SAMP(),总体标准差用 STDDEV_POP()
VARIANCE() 计算数值列的方差 VARIANCE(column) 同标准差函数,方差为标准差的平方。
  1. 连接查询
    -- 内连接
    SELECT e.name, d.department_name 
    FROM employees e 
    INNER JOIN departments d ON e.department_id = d.id;
    
    -- 左连接
    SELECT e.name, d.department_name 
    FROM employees e 
    LEFT JOIN departments d ON e.department_id = d.id;
    
连接类型 语法 描述
内连接 (INNER JOIN) SELECT ... FROM A INNER JOIN B ON 条件 返回两个表中 匹配的行(交集)
左连接 (LEFT JOIN) SELECT ... FROM A LEFT JOIN B ON 条件 返回左表所有行 + 右表匹配的行(右表无匹配则显示 NULL
右连接 (RIGHT JOIN) SELECT ... FROM A RIGHT JOIN B ON 条件 返回右表所有行 + 左表匹配的行(左表无匹配则显示 NULL
全外连接 (FULL OUTER JOIN) SELECT ... FROM A LEFT JOIN B ... UNION SELECT ... FROM A RIGHT JOIN B ... 返回左右表所有行(并集),MySQL 需用 UNION 模拟
交叉连接 (CROSS JOIN) SELECT ... FROM A CROSS JOIN B 返回笛卡尔积(无连接条件)
自连接 (Self Join) SELECT ... FROM A AS t1 JOIN A AS t2 ON 条件 同一表内连接,常用于层级数据(如员工和经理)
  1. 子查询
    SELECT name 
    FROM employees 
    WHERE salary > (SELECT AVG(salary) FROM employees);
    

六、用户管理

1. 用户创建与删除

操作 命令
创建用户 CREATE USER 'username'@'host' IDENTIFIED BY 'password';
删除用户 DROP USER 'username'@'host';
修改用户密码 ALTER USER 'username'@'host' IDENTIFIED BY 'new_password';
查看所有用户 SELECT user, host FROM mysql.user;

示例

-- 创建允许本地登录的用户
CREATE USER 'dev'@'localhost' IDENTIFIED BY 'DevPass123!';

-- 创建允许任意主机登录的用户
CREATE USER 'admin'@'%' IDENTIFIED BY 'AdminPass456!';

七、权限管理

1. 授予与撤销权限

操作 命令
授予权限 GRANT 权限 ON 数据库.表 TO 'user'@'host';
撤销权限 REVOKE 权限 ON 数据库.表 FROM 'user'@'host';
授予所有权限 GRANT ALL PRIVILEGES ON 数据库.* TO 'user'@'host';
允许用户授权他人 GRANT ... WITH GRANT OPTION;
查看用户权限 SHOW GRANTS FOR 'user'@'host';
刷新权限 FLUSH PRIVILEGES; (修改权限表后执行)

常用权限

  • SELECT, INSERT, UPDATE, DELETE: 基础数据操作权限
  • CREATE, ALTER, DROP: 对象管理权限
  • ALL PRIVILEGES: 所有权限(慎用)

示例

-- 授予用户对 `mydb` 数据库的读写权限
GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO 'dev'@'localhost';

-- 授予管理员所有权限(含授权能力)
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION;

-- 撤销删除权限
REVOKE DELETE ON mydb.* FROM 'dev'@'localhost';

八、备份与恢复

1. 逻辑备份(导出 SQL 文件)

场景 命令
全库备份 mysqldump -u 用户名 -p --all-databases > full_backup.sql
单库备份 mysqldump -u 用户名 -p 数据库名 > db_backup.sql
单表备份 mysqldump -u 用户名 -p 数据库名 表名 > table_backup.sql
增量备份 依赖二进制日志(Binlog):
mysqlbinlog binlog.000001 > incr.sql

常用参数

  • --single-transaction: 保证 InnoDB 表备份一致性(事务隔离)。
  • --routines: 包含存储过程和函数。
  • --events: 包含事件调度器。
  • --skip-lock-tables: 不锁定表(需确保数据一致性)。

示例

# 备份 `mydb` 数据库(包含存储过程)
mysqldump -u root -p --routines --events mydb > mydb_backup.sql

2. 恢复数据

场景 命令
恢复全库 mysql -u 用户名 -p < full_backup.sql
恢复单库 mysql -u 用户名 -p 数据库名 < db_backup.sql
恢复单表 mysql -u 用户名 -p 数据库名 < table_backup.sql
增量恢复 先恢复全量备份,再应用增量 Binlog:
`mysqlbinlog binlog.000001

示例

# 恢复 `mydb` 数据库
mysql -u root -p mydb < mydb_backup.sql

3. 物理备份(直接复制数据文件)

操作 说明
停止 MySQL 服务 systemctl stop mysqlservice mysql stop
复制数据目录 cp -R /var/lib/mysql /backup/mysql_data
使用 XtraBackup 热备份工具(无需停服务):
xtrabackup --backup --target-dir=/backup/

你可能感兴趣的:(三,数据分析,mysql,数据库)