MySQL 基础入门:核心概念、安装部署与常用命令

一、MySQL 基础概念

1. 定义与特性

关系型数据库:结构化数据存储在二维表中,表之间存在数据关联。

二维表结构:行(记录,描述一个对象)、列(字段,描述对象属性)。

核心用途:存储和读取核心业务数据(如用户信息、交易记录等)。

如何访问到数据库:

**本地访问(和 MySQL 服务器在同一台 Linux 机器)**走图例里的 socket(本地通信文件),不需要网络端口。直接用 MySQL 客户端命令即可:mysql -u用户名 -p(比如 mysql -uroot -p),默认会通过本地 socket 文件连接到 MySQL 服务器。

**远程访问(外部机器访问 Linux 上的 MySQL)**走图例里的 3306 端口(MySQL 默认网络端口):

先配置 MySQL:授权远程用户(比如 grant all on *.* to '用户名'@'%' identified by '密码';),然后刷新权限 flush privileges;

再开放 Linux 防火墙的 3306 端口(比如 firewall-cmd --add-port=3306/tcp --permanent 后重启防火墙)。

外部机器用命令连接:mysql -h Linux机器的IP -u用户名 -p -P3306

2. 常用数据类型

类型 说明 示例
INT 整型,用于存储整数 id INT
FLOAT 单精度浮点型(4字节),存储小数 score FLOAT
DOUBLE 双精度浮点型(8字节),精度高于FLOAT price DOUBLE
CHAR(n) 固定长度字符类型,不足补空格 name CHAR(10)
VARCHAR(n) 可变长度字符类型,最大支持n个字符 address VARCHAR(50)
TEXT 文本类型,用于存储长文本 description TEXT
DECIMAL(p,s) 精确数值类型,p总长度,s小数位数 salary DECIMAL(5,2)

注意:CHAR 超出长度时,低版本截取、高版本报错;VARCHAR 仅存储实际长度数据。

3. 文件存储结构

数据目录:/usr/local/mysql/data

存储引擎文件差异:

特性 MyISAM InnoDB
事务支持 不支持 支持
外键约束 不支持 支持
锁定级别 表级锁定 行级锁定(全表扫描时为表级锁)
读写并发能力 较低(读写相互阻塞) 较好
全文索引支持 支持 5.5 版本后支持
文件存储 .MYD(数据)、.MYI(索引)、.frm(结构) .ibd(表空间)、.frm(结构)
适用场景 无需事务、单独写入或查询频繁的场景 需要事务、一致性要求高、数据更新频繁的场景

4. 版本说明

常用版本:5.7(市场占比高)、8.0(新版本)。

集群要求:组成集群时,所有节点版本必须一致。

二、YUM 安装 MySQL 5.7 部署步骤

1. 环境准备

Bash 复制代码
# 安装依赖工具
yum install -y yum-utils
# 上传并解压 RPM 依赖包
unzip mysql5720_rpms.zip
# 切换到 RPM 包目录
cd mysql5720_rpms
# 本地安装(自动处理依赖)
yum localinstall -y *.rpm

2. 启动服务与初始配置

Bash 复制代码
# 启动 MySQL 服务
systemctl start mysqld
# 编辑配置文件(降低密码强度、设置字符集等)
vim /etc/my.cnf

配置文件新增/修改内容:

TOML 复制代码
[mysqld]
# 密码策略(仅检查长度)
validate_password_policy=LOW
# 最小密码长度
validate_password_length=6
# 服务器端字符集(支持中文/Emoji)
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'

[mysql]
# 客户端默认字符集
default-character-set=utf8mb4

[client]
# 客户端连接字符集
default-character-set=utf8mb4

3. 获取初始密码与登录

Bash 复制代码
# 从错误日志中提取初始密码
grep password /var/log/mysqld.log
# 登录 MySQL(密码含特殊字符需转义)
mysql -uroot -p初始密码

4. 修改密码与验证

SQL 复制代码
# 修改 root 密码(示例:abc123)
alter user 'root'@'localhost' identified by 'abc123';
# 验证:查看数据库列表
show databases;
# 退出后重新登录验证
exit
mysql -uroot -pabc123

四、SQL语句分类与核心操作

1. SQL语句分类

分类 功能 常用语句
DDL(数据定义语言) 创建/修改/删除数据库对象 CREATE, DROP, ALTER
DML(数据操纵语言) 增删改表数据 INSERT, UPDATE, DELETE
DQL(数据查询语言) 查询数据 SELECT
DCL(数据控制语言) 用户权限管理 GRANT, REVOKE, COMMIT, ROLLBACK

2. DDL操作(数据库与表管理)

(1)数据库操作

创建数据库:CREATE DATABASE 数据库名;(示例:CREATE DATABASE szsx_school;

切换数据库:USE 数据库名;(示例:USE szsx_school;

删除数据库:DROP DATABASE 数据库名;

(2)表操作

创建表(含约束示例):

SQL 复制代码
CREATE TABLE demo1 (
  id INT NOT NULL,                # 非空约束
  name CHAR(10) NOT NULL,         # 非空约束
  score DECIMAL(5,2),             # 小数类型(总长度5,2位小数)
  passwd CHAR(48) DEFAULT '',     # 默认值约束
  PRIMARY KEY (id)                # 主键约束
);

查看表结构:DESCRIBE 表名;(简写:DESC 表名;

修改表结构:

  • 重命名表:ALTER TABLE 旧表名 RENAME 新表名;

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

  • 修改字段:ALTER TABLE 表名 CHANGE 旧字段名 新字段名 数据类型 [约束];

  • 删除字段:ALTER TABLE 表名 DROP 字段名;

  • 删除表:DROP TABLE 表名;(跨库删除:DROP TABLE 数据库名.表名;

3. DML操作(表数据管理)

插入数据:

SQL 复制代码
# 指定字段插入
INSERT INTO 表名(字段1,字段2,...) VALUES (值1,值2,...);
# 全字段插入(需按字段顺序)
INSERT INTO 表名 VALUES (值1,值2,...);

更新数据(务必加WHERE条件,避免全表更新):

SQL 复制代码
UPDATE 表名 SET 字段1=值1[,字段2=值2] WHERE 条件;

删除数据:

SQL 复制代码
# 带条件删除(可回滚)
DELETE FROM 表名 WHERE 条件;
# 清空表(不可回滚,ID自增重置)
TRUNCATE TABLE 表名;

4. DQL操作(数据查询)

查询所有字段:SELECT * FROM 表名;

指定字段查询:SELECT 字段1,字段2 FROM 表名 WHERE 条件;

限制查询结果:

SQL 复制代码
SELECT * FROM 表名 LIMIT 2;        # 显示前2行
SELECT * FROM 表名 LIMIT 2,3;      # 从第2行开始,显示3行

竖向显示结果:SELECT * FROM 表名\G

5. 表高级操作

(1)临时表

创建临时表:CREATE TEMPORARY TABLE 表名 (...);

特性:仅存在于当前连接,连接关闭后自动销毁,支持增删改查操作

(2)克隆表

仅复制表结构:CREATE TABLE 新表 LIKE 旧表;

复制表结构+数据:CREATE TABLE 新表 AS SELECT * FROM 旧表;

五、用户与权限管理

1. 用户管理

创建用户(指定登录地址):

SQL 复制代码
# 本地登录(仅本机可访问)
CREATE USER '用户名'@'localhost' IDENTIFIED BY '密码';
# 任意IP登录(生产环境慎用)
CREATE USER '用户名'@'%' IDENTIFIED BY '密码';

查看用户:

SQL 复制代码
USE mysql;
SELECT User, Host, authentication_string FROM user;

修改密码:

SQL 复制代码
# 修改当前用户密码
SET PASSWORD = PASSWORD('新密码');
# 修改其他用户密码
SET PASSWORD FOR '用户名'@'来源地址' = PASSWORD('新密码');

删除用户:DROP USER '用户名'@'来源地址';

2. 权限管理

(1)授权操作

授权格式(权限列表用逗号分隔):

SQL 复制代码
GRANT 权限列表 ON 数据库.表 TO '用户名'@'来源地址' IDENTIFIED BY '密码';

示例:

SQL 复制代码
# 授予查询school库所有表的权限(本地登录)
GRANT SELECT ON school.* TO 'zhangsan'@'localhost' IDENTIFIED BY 'abc123';
# 授予所有数据库所有表的全部权限(任意IP登录)
GRANT ALL PRIVILEGES ON *.* TO 'lisi'@'%' IDENTIFIED BY '123456';

刷新权限(授权后生效):FLUSH PRIVILEGES;

(2)权限查询与撤销

查看用户权限:SHOW GRANTS FOR '用户名'@'来源地址';

撤销权限:

SQL 复制代码
REVOKE 权限列表 ON 数据库.表 FROM '用户名'@'来源地址';
# 撤销全部权限
REVOKE ALL ON *.* FROM '用户名'@'来源地址';

3. 常用权限说明

权限 功能描述
SELECT 查询表数据
INSERT 插入表数据
UPDATE 修改表数据
DELETE 删除表数据
CREATE 创建数据库/表
DROP 删除数据库/表
ALTER 修改表结构
INDEX 建立索引
ALL PRIVILEGES 所有权限(管理员常用)

4. 忘记root密码处理

(1)修改配置文件/etc/my.cnf,在[mysqld]节点添加:skip-grant-tables

(2)重启服务:systemctl restart mysqld

(3)无密码登录:mysql -uroot

(4)修改root密码并刷新权限:

SQL 复制代码
UPDATE mysql.user SET AUTHENTICATION_STRING=PASSWORD('新密码') WHERE user='root';
FLUSH PRIVILEGES;

(5)删除skip-grant-tables配置,重启MySQL服务即可

六、基础查询操作速查

操作需求 SQL语句
查看所有数据库 SHOW DATABASES;
查看当前数据库所有表 SHOW TABLES;
查看指定数据库的表 SHOW TABLES IN 数据库名;
查看表结构 DESCRIBE 表名;DESC 表名;
-------------------- ---------------------------------------
查看所有数据库 SHOW DATABASES;
查看当前数据库所有表 SHOW TABLES;
查看指定数据库的表 SHOW TABLES IN 数据库名;
查看表结构 DESCRIBE 表名;DESC 表名;
查看字符集配置 show variables like 'character_set%';
相关推荐
霸王大陆43 分钟前
《零基础学PHP:从入门到实战》教程-模块七:MySQL 数据库基础-2
数据库·mysql·php
霸王大陆1 小时前
《零基础学PHP:从入门到实战》教程-模块七:MySQL 数据库基础-1
数据库·mysql·php
康不坦丁1 小时前
MySQL 的 order by 简化(使用列序号和列别名排序)
后端·mysql
('-')2 小时前
《从根上理解MySQL是怎样运行的》第二十五章笔记
数据库·笔记·mysql
尽兴-2 小时前
问题记录:数据库字段 `CHAR(n)` 导致前端返回值带空格的排查与修复
前端·数据库·mysql·oracle·达梦·varchar·char
Cat God 0072 小时前
MySQL-查漏补缺版(六:MySQL-优化)
android·数据库·mysql
x***13393 小时前
【Mysql】:如何恢复误删的数据?
数据库·mysql
菜鸟小九3 小时前
mysql运维(日志)
运维·数据库·mysql
zwm_yy3 小时前
mysql主从主备回顾
运维·mysql·adb