菜鸟科技网

Linux MySQL命令有哪些常用及实用技巧?

Linux 系统中,MySQL 是最常用的关系型数据库管理系统之一,掌握其命令行操作是管理和维护数据库的基础,本文将详细讲解 MySQL 的常用命令,涵盖登录、数据库操作、表操作、数据管理、用户权限等核心功能,帮助用户高效完成数据库管理任务。

Linux MySQL命令有哪些常用及实用技巧?-图1
(图片来源网络,侵删)

MySQL 登录与退出

要使用 MySQL 命令行工具,首先需要登录到 MySQL 服务器,基本登录命令为:

mysql -u 用户名 -p

执行后会提示输入密码,输入正确密码后即可进入 MySQL 交互界面,若 MySQL 服务未运行,需先启动服务(通过 sudo systemctl start mysqlsudo service mysql start)。

退出 MySQL 可使用以下命令:

exit;        -- 或 quit;

Ctrl+D 也可直接退出。

Linux MySQL命令有哪些常用及实用技巧?-图2
(图片来源网络,侵删)

数据库操作

显示所有数据库

SHOW DATABASES;

该命令列出服务器中所有数据库,默认包括 information_schemamysqlperformance_schema 等系统数据库。

创建数据库

CREATE DATABASE 数据库名 [CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci];

创建一个名为 mydb 的数据库并指定字符集为 utf8mb4(支持 emoji 和特殊字符):

CREATE DATABASE mydb DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;

选择数据库

USE 数据库名;

执行后,后续操作将针对该数据库,USE mydb;

删除数据库

DROP DATABASE 数据库名;

注意:此操作不可逆,会删除数据库及所有数据,需谨慎使用。

Linux MySQL命令有哪些常用及实用技巧?-图3
(图片来源网络,侵删)

表操作

显示当前数据库中的所有表

SHOW TABLES;

创建表

创建表需定义字段名、数据类型、约束等,创建一个用户表 users

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL UNIQUE,
    email VARCHAR(100) NOT NULL,
    age TINYINT UNSIGNED,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  • AUTO_INCREMENT:自增主键,从 1 开始自动递增。
  • NOT NULL:字段不能为空。
  • UNIQUE:字段值唯一。
  • DEFAULT CURRENT_TIMESTAMP:默认值为当前时间。
  • ENGINE=InnoDB:指定存储引擎为 InnoDB(支持事务和外键)。

查看表结构

DESC 表名;        -- 或 DESCRIBE 表名;

DESC users; 会显示字段名、数据类型、是否允许 NULL、键信息、默认值等。

修改表结构

  • 添加字段:

    ALTER TABLE 表名 ADD 字段名 数据类型 [约束];

    users 表添加 phone 字段:

    ALTER TABLE users ADD phone VARCHAR(20) DEFAULT '';
  • 修改字段:

    ALTER TABLE 表名 MODIFY 字段名 新数据类型 [新约束];

    修改 age 字段类型为 INT

    ALTER TABLE users MODIFY age INT;
  • 删除字段:

    ALTER TABLE 表名 DROP 字段名;

    例如删除 phone 字段:

    ALTER TABLE users DROP phone;
  • 重命名表:

    RENAME TABLE 旧表名 TO 新表名;

删除表

DROP TABLE 表名;

注意:删除表会同时删除表中的所有数据,且无法恢复。

数据管理(增删改查)

插入数据(INSERT)

INSERT INTO 表名 (字段1, 字段2, ...) VALUES (值1, 值2, ...);

users 表插入数据:

INSERT INTO users (username, email, age) VALUES ('Alice', 'alice@example.com', 25);

若插入所有字段,可省略字段名列表:

INSERT INTO users VALUES (NULL, 'Bob', 'bob@example.com', 30, DEFAULT);
  • NULL 表示自增主键的默认值。
  • DEFAULT 表示使用字段的默认值(如 created_at 的时间戳)。

查询数据(SELECT)

  • 基本查询:

    SELECT 字段名1, 字段名2, ... FROM 表名 [WHERE 条件];

    查询所有用户名和邮箱:

    SELECT username, email FROM users;
  • 条件查询(WHERE 子句):

    SELECT * FROM users WHERE age > 20 AND gender = 'M';

    常用条件操作符:, (或 <>), >, <, >=, <=, BETWEEN...AND..., IN(...), LIKE(模糊匹配,如 LIKE 'A%' 匹配以 A 开头的用户名)。

  • 排序(ORDER BY):

    SELECT * FROM users ORDER BY age DESC;        -- 按年龄降序排列

    ASC 为升序(默认),DESC 为降序。

  • 限制结果数(LIMIT):

    SELECT * FROM users LIMIT 5;        -- 只返回前 5 条记录

    分页查询:LIMIT offset, countLIMIT 0, 10 表示第 1-10 条(offset 从 0 开始)。

更新数据(UPDATE)

UPDATE 表名 SET 字段1=新值1, 字段2=新值2, ... WHERE 条件;

注意:必须加 WHERE 条件,否则会更新全表数据!更新用户 Alice 的年龄:

UPDATE users SET age = 26 WHERE username = 'Alice';

删除数据(DELETE)

DELETE FROM 表名 WHERE 条件;

注意:必须加 WHERE 条件,否则会删除全表数据!删除年龄小于 18 的用户:

DELETE FROM users WHERE age < 18;

用户与权限管理

创建用户并授权

CREATE USER '用户名'@'主机' IDENTIFIED BY '密码';
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机';

创建用户 testuser,允许其从本地登录,并对 mydb 数据库的所有表有查询和插入权限:

CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'Test123!@#';
GRANT SELECT, INSERT ON mydb.* TO 'testuser'@'localhost';
  • 权限列表包括 SELECT(查询)、INSERT(插入)、UPDATE(更新)、DELETE(删除)、ALL(所有权限)等。
  • 表示所有数据库的所有表,db.* 表示某数据库的所有表。

刷新权限

修改权限后需执行以下命令使权限生效:

FLUSH PRIVILEGES;

撤销权限

REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机';

撤销 testuser 的插入权限:

REVOKE INSERT ON mydb.* FROM 'testuser'@'localhost';

删除用户

DROP USER '用户名'@'主机';

数据备份与恢复

备份数据库(mysqldump)

mysqldump -u 用户名 -p 数据库名 > 备份文件.sql

备份 mydb 数据库到 mydb_backup.sql

mysqldump -u root -p mydb > mydb_backup.sql

备份所有数据库:mysqldump -u root -p --all-databases > all_backup.sql

恢复数据库

mysql -u 用户名 -p 数据库名 < 备份文件.sql

mydb_backup.sql 恢复 mydb 数据库:

mysql -u root -p mydb < mydb_backup.sql

常用数据类型

数据类型 说明 示例
INT 整数,4 字节 age INT
VARCHAR(n) 可变长度字符串,n 为最大长度 username VARCHAR(50)
TEXT 长文本,最大 64KB content TEXT
DATETIME 日期时间,格式 'YYYY-MM-DD HH:MM:SS' created_at DATETIME
TIMESTAMP 时间戳,自动更新 update_time TIMESTAMP
DECIMAL(m, d) 精确小数,m 为总位数,d 为小数位数 price DECIMAL(10, 2)
BOOLEAN / TINYINT 布尔值,0 为 false,1 为 true is_active TINYINT(1)

FAQs

Q1:MySQL 中忘记 root 密码如何重置?
A1:重置 root 密码的步骤如下(以 Linux 系统为例):

  1. 停止 MySQL 服务:sudo systemctl stop mysql
  2. 跳过权限表启动 MySQL:sudo mysqld_safe --skip-grant-tables &
  3. 无密码登录 MySQL:mysql -u root
  4. 执行以下命令重置密码(MySQL 5.7+):
    UPDATE mysql.user SET authentication_string=PASSWORD('新密码') WHERE User='root';
    FLUSH PRIVILEGES;
  5. 退出并重启 MySQL 服务:sudo systemctl restart mysql

Q2:如何优化 MySQL 查询性能?
A2:优化 MySQL 查询性能可从以下方面入手:

  1. 索引优化:为常用查询条件(如 WHERE 子句中的字段)添加索引,CREATE INDEX idx_email ON users(email);
  2. **避免 SELECT ***:只查询必要的字段,减少数据传输量。
  3. 使用 EXPLAIN 分析查询:通过 EXPLAIN SELECT * FROM users WHERE age > 20; 查看查询执行计划,判断是否走索引。
  4. 控制分页页码:避免大偏移量分页(如 LIMIT 100000, 10),可采用“延迟关联”优化。
  5. 定期维护表:执行 OPTIMIZE TABLE 表名; 碎片整理,提升查询效率。
分享:
扫描分享到社交APP
上一篇
下一篇