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

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

linux mysql命令详解
(图片来源网络,侵删)

MySQL 登录与退出

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

mysql -u 用户名 -p

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

退出 MySQL 可使用以下命令:

exit;        -- 或 quit;

Ctrl+D 也可直接退出。

linux mysql命令详解
(图片来源网络,侵删)

数据库操作

显示所有数据库

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命令详解
(图片来源网络,侵删)

表操作

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

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长文本,最大 64KBcontent 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 为 trueis_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 表名; 碎片整理,提升查询效率。

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/428598.html<

(0)
运维的头像运维
上一篇2025-10-27 19:41
下一篇 2025-10-27 19:45

相关推荐

  • WOW GM命令有哪些?

    在《魔兽世界》中,游戏管理员(GM)命令是用于游戏管理、测试和特殊操作的指令系统,通常仅限官方人员或特定测试环境使用,这些命令功能强大,涵盖角色管理、物品生成、地图操控、事件触发等多个维度,普通玩家无法在正式服中直接使用,以下从核心功能、命令分类、使用注意事项及实际案例等方面,详细解析GM命令的相关知识,GM命……

    2025-11-20
    0
  • 如何安全高效修改网站源文件?

    修改网站源文件是网站开发、维护和优化过程中的常见操作,涉及技术细节、安全规范和流程管理等多个方面,以下从准备工作、修改方法、注意事项及测试验证等环节,详细说明如何正确修改网站源文件,修改前的准备工作在动手修改源文件前,充分的准备能避免操作失误导致的数据丢失或网站故障,备份现有文件是最关键的一步,通过FTP/SF……

    2025-11-20
    0
  • 如何改网站后台内容?具体步骤是什么?

    运营者需要掌握的基本技能,无论是更新产品信息、发布文章还是调整页面布局,熟悉后台操作都能高效完成内容管理,以下将从登录后台、内容编辑、媒体管理、发布流程及注意事项等方面详细说明操作步骤,帮助用户快速上手,登录网站后台是第一步,网站后台的登录地址会设置为“域名/wp-admin”(WordPress为例)或“域名……

    2025-11-20
    0
  • 网站如何加会员系统?关键步骤有哪些?

    网站添加会员系统是提升用户粘性、实现商业价值的重要手段,具体实施需从需求分析、功能设计、技术选型到运营推广全流程规划,以下从核心步骤、功能模块、技术实现及注意事项等方面详细说明,明确会员系统建设目标与需求在开发前需清晰定义会员系统的核心目标,例如是通过付费会员提升营收,还是通过积分体系增强用户活跃度,根据目标确……

    2025-11-20
    0
  • 常见Unix命令有哪些?

    在Unix操作系统中,命令行是与系统交互的核心方式,熟练掌握常见命令能极大提升工作效率,Unix命令种类繁多,涵盖文件管理、目录操作、文本处理、系统监控等多个领域,以下将详细介绍这些命令的功能及使用场景,文件与目录管理命令文件和目录是Unix系统中最基本的元素,相关命令是日常操作的基础,ls命令用于列出目录内容……

    2025-11-19
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注