文章目录

  • 前言
  • 一、数据库概述
    • 1.1 前置知识
      • 1.1.1 LAMP / LNMP 架构
      • 1.1.2 数据库的定位
    • 1.2 数据库基本概念
      • 1.2.1 数据
      • 1.2.2 表
      • 1.2.3 数据库
      • 1.2.4 数据库管理系统(DBMS)
      • 1.2.5 数据库系统(DBS)
    • 1.3 数据库发展史
      • 1.3.1 第一阶段(层次型/网状型)
      • 1.3.2 第二阶段(关系型)
      • 1.3.3 第三阶段(新型数据库)
    • 1.4 关系型数据库
    • 1.5 非关系型数据库(NoSQL)
      • 1.5.1 优点
      • 1.5.2 缺点
      • 1.5.3 Redis 与 Memcached 对比
    • 1.6 关系型 vs 非关系型数据库对比
    • 1.7 小结
  • 二、数据库安装
    • 2.1 环境准备
    • 2.2 源码解压与依赖
      • 2.2.1 Boost 是什么?
      • 2.2.2 为什么编译 MySQL 需要 Boost?
      • 2.2.3 编译时与 Boost 的交互方式
    • 2.3、CMake 编译配置
    • 2.4 配置 MySQL
      • 2.4.1 权限管理
      • 2.4.2 修改配置文件 `/etc/my.cnf`
    • 2.5 环境变量设置
    • 2.6 数据库初始化
    • 2.7 服务管理
    • 2.8 账号密码管理
  • 三、MySQL 数据库管理
    • 3.1 数据库基本操作
      • 3.1.1 查看数据库信息
      • 3.1.2 切换数据库
      • 3.1.3 查看数据库中的表
      • 3.1.4 查看表结构
    • 3.2 常用数据类型
    • 3.3 数据库文件存储结构
    • 3.4 SQL 语句分类
    • 3.5 DDL 操作(数据库和表管理)
      • 3.5.1 创建数据库
      • 3.5.2 创建数据表
      • 3.5.3 删除表
      • 3.5.4 删除数据库
      • 3.5.5 修改表结构(ALTER)
    • 3.6 DML 操作(表数据管理)
      • 3.6.1 插入数据
      • 3.6.2 更新数据
      • 3.6.3 删除数据
      • 3.6.4 清空表内数据
      • 3.6.5 回滚
        • 3.6.5.1 回滚失败的根本原因
        • 3.6.5.2 如何正确使用事务回滚
        • 3.6.5.3 已提交DELETE的数据恢复方案
        • 3.6.5.4 预防措施
        • 3.6.5.5 检查当前事务设置
    • 3.7 DQL 操作(数据查询)
      • 3.7.1 查询数据
      • 3.7.2 限制查询结果
      • 3.7.3 竖向显示结果
    • 3.8 表高级操作
      • 3.8.1 临时表
      • 3.8.2 克隆表
    • 3.9 用户管理
      • 3.9.1 创建用户
      • 3.9.2 查看用户
      • 3.9.3 删除用户
      • 3.9.4 修改密码
      • 3.9.5 忘记 root 密码处理
    • 3.10 用户授权管理
      • 3.10.1 授权用户
      • 3.10.2 查看授权
      • 3.10.3 撤销权限
    • 3.11 权限说明
  • 总结


前言

在数据驱动的现代信息系统中,数据库是存储、管理核心数据的关键载体,从日常社交、电商平台到企业级管理系统,均需其提供底层支撑。掌握数据库知识,是开发者与运维人员的核心技能之一。

本文聚焦数据库核心知识,先梳理数据库的基础概念、发展历程与分类(含关系型与非关系型数据库对比),再详解数据库安装步骤,最后深入 MySQL 的日常管理操作(含 SQL 语句应用、用户权限控制等),为读者构建从理论到实践的完整数据库知识框架,夯实后续深入学习的基础。


一、数据库概述

1.1 前置知识

1.1.1 LAMP / LNMP 架构

  • LAMP = Linux + Apache + MySQL/MariaDB + PHP
  • LNMP = Linux + Nginx + MySQL/MariaDB + PHP

1.1.2 数据库的定位

在企业架构中,数据库用于存储和管理核心数据,例如:

  • 聊天软件(微信、QQ):聊天文字、语音、视频、图片
  • 外卖平台(饿了么/美团):订单、支付、商家数据
  • 游戏(绝地求生、英雄联盟):玩家信息、装备、战绩

1.2 数据库基本概念

1.2.1 数据

  • 定义:描述客观事物的符号记录,包括数字、文字、图像、声音等。
  • 存储方式:以记录形式存储,统一格式,相同类型的数据存放在一起。
  • 示例:班级同学信息中,一名同学是一条记录,包含学号、姓名、性别等属性。

1.2.2 表

  • 表结构 = 行(记录) + 列(字段)
  • 特点:记录由字段组成,字段由字符/数字组成,可供不同用户共享,具有较小的冗余度和较高的数据独立性。

1.2.3 数据库

数据库是表的集合,是按照一定组织方式存储的相关数据集合。

1.2.4 数据库管理系统(DBMS)

  • 定义:操作和管理数据库的软件。
  • 主要功能:
    1. 建库与维护(建表、转储与恢复、重组、性能监视)
    2. 数据定义(数据结构、存储结构、保密模式)
    3. 数据操作(查询、统计、更新)
    4. 运行管理(并发控制、存取控制、维护)
    5. 通信(与其他软件交互)

1.2.5 数据库系统(DBS)

  • 组成:硬件 + 操作系统 + 数据库 + DBMS + 应用软件 + 用户
  • DBA(数据库管理员):负责备份恢复、维护、用户管理。
  • 数据库应用软件:Navicat、人事管理系统、财务系统、图书管理等。

1.3 数据库发展史

1.3.1 第一阶段(层次型/网状型)

  • IMS(IBM,1969)

1.3.2 第二阶段(关系型)

  • 关系模型(1970年由E.F. Codd提出)
  • 核心思想:将数据放在二维表中,用数学集合和关系代数描述和操作数据。
  • 代表产品:System R(IBM)、Ingres(衍生出PostgreSQL)

1.3.3 第三阶段(新型数据库)

  • 特点:面向对象、开放性、多平台
  • SQL + NoSQL 混合使用
  • 新兴数据库:MariaDB、PostgreSQL、时序数据库

1.4 关系型数据库

  • 数据模型:E-R 模型(实体-关系)
    • 行(记录) = 实体
    • 列(字段) = 属性
    • 表与表之间存在关系(1对1,1对多,多对多)
  • 主键:唯一、非空,类比学号/身份证号。
  • 常见产品:MySQL、Oracle、SQL Server、DB2、PostgreSQL 等。

1.5 非关系型数据库(NoSQL)

  • 定义:Not Only SQL,存储方式不限于表,可存储键值对、文档、列式数据等。
  • 典型产品:Redis、Memcached、MongoDB、HBase。
  • 应用场景:高并发、缓存、大数据实时计算。

1.5.1 优点

  1. 格式灵活(Key-Value、文档、图片等)
  2. 速度快(基于内存存储)
  3. 高扩展性
  4. 成本低(开源,部署简单)

1.5.2 缺点

  1. 不支持 SQL
  2. 缺少事务处理
  3. 复杂查询支持不足
  4. 大部分数据在内存,成本较高

1.5.3 Redis 与 Memcached 对比

  • 相同点:都存储热点数据,内存运行,速度快。
  • 不同点:Redis 支持持久化,数据可落盘;Memcached 纯内存,断电丢失。

1.6 关系型 vs 非关系型数据库对比

特点关系型数据库非关系型数据库
数据结构表(二维表)KV、文档、列式、图形
优点结构清晰,SQL通用,支持复杂查询格式灵活,速度快,高并发
缺点表结构固定,I/O 瓶颈无SQL、事务差、复杂查询弱
代表产品MySQL、Oracle、PostgreSQLRedis、MongoDB、HBase

1.7 小结

  1. 当前企业的主流数据库系统:关系型(MySQL/Oracle/SQL Server)+ 非关系型(Redis/MongoDB)。
  2. DBMS 的作用:桥梁,负责接收请求、转化指令、执行数据库操作并返回结果。
  3. 选型思路:
    • 数据关系清晰、结构化 → 关系型数据库
    • 高并发、非结构化、大数据分析 → 非关系型数据库
    • 实际应用常常 SQL + NoSQL 混合使用(如:Redis 缓存 + MySQL 持久化)。

二、数据库安装

2.1 环境准备

安装编译工具和依赖:

yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake

创建 MySQL 专用用户:

useradd -s /sbin/nologin mysql

2.2 源码解压与依赖

tar zxvf mysql-5.7.17.tar.gz -C /opt
tar zxvf boost_1_59_0.tar.gz -C /usr/local/
mv /usr/local/boost_1_59_0 /usr/local/boost

2.2.1 Boost 是什么?

Boost 是一个庞大且高质量的、可移植的 C++ 源程序库。它被称为 “C++ 的标准预备库”,因为很多 Boost 库中的组件后来都被吸收到了 C++ 的国际标准中(如 C++11, C++14, 等)。它提供了大量在标准 C++ 库中尚未包含的、但极其有用的功能和工具,例如智能指针、正则表达式、线程、文件系统操作等。

2.2.2 为什么编译 MySQL 需要 Boost?

MySQL 的源代码(尤其是新版本,如 5.7+)的某些部分直接使用了 Boost 库中的特定组件来实现其功能。

具体来说,MySQL 在以下方面可能用到 Boost:

  • 智能指针(Smart Pointers):如 scoped_ptr, shared_ptr。这些可以帮助安全、自动地管理内存,避免内存泄漏,提升代码的健壮性。
  • 模板元编程(Template Metaprogramming):Boost 提供了大量用于编译期计算和代码生成的模板工具,可以帮助构建更灵活、更高效的代码结构。
  • 其他工具:如 Boost.Geometry 用于处理地理空间数据(GIS),这对于 MySQL 的地理空间数据类型和函数支持可能很重要。

因此,在编译 MySQL 时,编译器必须能够找到 Boost 库的头文件(Header Files),以便能够正确地编译那些使用了 Boost 代码的 MySQL 源文件。

2.2.3 编译时与 Boost 的交互方式

在运行 cmake 命令配置 MySQL 编译环境时,你可以通过 -DWITH_BOOST= 参数来指定 Boost 的位置。

cmake . -DWITH_BOOST=/usr/local/boost

这时会发生以下情况:

  1. 检查:CMake 会检查你指定的目录(或系统默认路径)是否存在所需的 Boost 库。
  2. 使用:如果找到了,编译过程就会使用该路径下的 Boost 头文件。
  3. 下载这是一个非常关键的点:如果你没有指定 -DWITH_BOOST 参数,或者指定的路径没有找到 Boost,CMake 配置脚本会自动从互联网下载它所需版本的 Boost 源代码包,并将其解压到 MySQL 源码目录下的 boost/ 子目录中,然后使用这个本地副本进行编译。

所以,你手动安装 Boost 的主要目的就是为了避免在编译过程中临时下载。 因为自动下载可能会遇到网络问题(速度慢、连接失败),导致编译配置中断。预先安装好 Boost 可以使编译过程更顺畅、更可控。


2.3、CMake 编译配置

进入源码目录:

cd /opt/mysql-5.7.17/

执行 cmake(关键参数):

cmake \
#指定mysql安装路径,必要
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
#指定mysql进程监听套接字文件(数据库文件)的存储路径,必要
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
#指定配置文件的路径,必要
-DSYSCONFDIR=/etc \
#指定mysql的pid文件位置,必要
-DSYSTEMD_PID_DIR=/usr/local/mysql \
#指定默认使用的字符集
-DDEFAULT_CHARSET=utf8  \
#指定默认使用的字符集校对规则
-DDEFAULT_COLLATION=utf8_general_ci \
#指定支持其他字符编码
-DWITH_EXTRA_CHARSETS=all \
#安装INNOBASE存储引擎
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
#安装ARCHIVE存储引擎
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
#安装BLACKHOLE存储引擎
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
#安装FEDERATED存储引擎
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
#指定数据库文件存储路径,超核心,必要
-DMYSQL_DATADIR=/usr/local/mysql/data \
#指定boost路径,当使用集成包安装时直接使用-DWTH_BOOST=boost
-DWITH_BOOST=/usr/local/boost \
#生成便于systemd管理的文件
-DWITH_SYSTEMD=1

存储引擎选项:
MYISAM,MERGE,MEMORY和cSv引擎是默认编译到服务器中,并不需要明确地安装。静态编译一个存储引擎到服务器,使用-DWITH engine STORAGE ENGINE= 1
可用的存储引擎值有:ARCHIVE,BLACKHOLE,EXAMPLE,FBDERATBD,IMNOBASB(InnoDB),PARTTTON(partitioning support),和PERFSCHEMA(Performance schema)

编译安装:

make -j 4 && make install

注意:如果 CMake 出错,解决后需删除 CMakeCache.txt 再重新执行。


2.4 配置 MySQL

2.4.1 权限管理

chown -R mysql:mysql /usr/local/mysql/
chown mysql:mysql /etc/my.cnf

2.4.2 修改配置文件 /etc/my.cnf

#客户端配置
[client] 
#客户端连接mysql的端口,默认为3306
port = 3306
#客户端通过unix socket文件连接mysql(Linux/Unix环境)
socket=/usr/local/mysql/mysql.sock
#默认字符集,utf-8
default-character-set=utf8#服务端配置
[mysqld]
#mysql以用户mysql的身份运行
user = mysql
#mysql的安装路径
basedir=/usr/local/mysql
#mysql数据库的数据文件存放位置
datadir=/usr/local/mysql/data
#服务监听端口
port = 3306
#mysql默认字符集
character-set-server=utf8
#mysql存放PID的位置
pid-file = /usr/local/mysql/mysqld.pid
#mysql服务端socket套接字位置
socket=/usr/local/mysql/mysql.sock
#允许任意IP连接到数据库(0.0.0.0表示监听所有网卡)
bind-address = 0.0.0.0
#关闭DNS解析,使用IP地址验证用户,提高连接速度
skip-name-resolve
#数据库最大连接数,当到达最大连接数时,数据库会报错
max_connections=2048
#默认引擎为innodb
default-storage-engine=INNODB
#最大允许传输的数据包大小
max_allowed_packet=16M
#mysql的id,唯一,常用于主从复制
server-id = 1
#设置SQL模式,控制SQL语法和数据校验规则,如 严格模式、禁止零日期、ANSI引号模式等,仅在需求时进行额外配置
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES#客户端工具配置
[mysql]
#客户端连接端口
port = 3306
#客户端默认字符集
default-character-set=utf8
#使用Unix socket文件连接
socket=/usr/local/mysql/mysql.sock
#开启自动补全
auto-rehash

2.5 环境变量设置

echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
source /etc/profile

2.6 数据库初始化

cd /usr/local/mysql/bin/
# ​mysql服务器的主程序
./mysqld \
#指定以无密码初始化
--initialize-insecure \
#指定用户为mysql
--user=mysql \
#指定mysql安装路径
--basedir=/usr/local/mysql \
#指定mysql的数据文件位置
--datadir=/usr/local/mysql/data

2.7 服务管理

cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
systemctl daemon-reload
systemctl start mysqld.service
systemctl enable mysqld
netstat -anpt | grep 3306

2.8 账号密码管理

设置 root 密码:

mysqladmin -u root -p password "123456"

登录 MySQL:

mysql -u root -p123456

三、MySQL 数据库管理

3.1 数据库基本操作

3.1.1 查看数据库信息

SHOW DATABASES;

在这里插入图片描述

3.1.2 切换数据库

USE 数据库名;

在这里插入图片描述

3.1.3 查看数据库中的表

SHOW TABLES;
SHOW TABLES IN 数据库名;

在这里插入图片描述
在这里插入图片描述

3.1.4 查看表结构

DESCRIBE 表名;

在这里插入图片描述

3.2 常用数据类型

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

3.3 数据库文件存储结构

  • MySQL 数据目录:/usr/local/mysql/data
  • 每个数据库对应一个子目录,每个表对应若干文件:
    • MyISAM.frm(表结构)、.MYD(数据)、.MYI(索引)
    • InnoDB
      • 独享表空间:.ibd 文件(每表一个文件)
      • 共享表空间:ibdata 文件(多个表共用)

3.4 SQL 语句分类

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

3.5 DDL 操作(数据库和表管理)

3.5.1 创建数据库

CREATE DATABASE 数据库名;

在这里插入图片描述

3.5.2 创建数据表

CREATE TABLE 表名 (字段1 数据类型 [约束条件],字段2 数据类型 [约束条件],...PRIMARY KEY (主键字段)
);

示例:

CREATE DATABASE test;
USE test;
CREATE TABLE class (id INT NOT NULL,name CHAR(10) NOT NULL,score DECIMAL(5,2),passwd CHAR(48) DEFAULT '',PRIMARY KEY (id)
);
DESC test;

在这里插入图片描述

3.5.3 删除表

DROP TABLE 表名;
DROP TABLE 数据库名.表名;

在这里插入图片描述

3.5.4 删除数据库

DROP DATABASE 数据库名;

在这里插入图片描述

3.5.5 修改表结构(ALTER)

-- 修改表名
ALTER TABLE 旧表名 RENAME 新表名;-- 增加字段
ALTER TABLE 表名 ADD 字段名 数据类型 [约束];-- 修改字段
ALTER TABLE 表名 CHANGE 旧列名 新列名 数据类型 [约束];
ALTER TABLE 表名 MODIFY COLUMN 字段名 数据类型 [约束];-- 删除字段
ALTER TABLE 表名 DROP 字段名;

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3.6 DML 操作(表数据管理)

3.6.1 插入数据

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

示例:

INSERT INTO newclass (id, name, passwd, sex) VALUES (1,'zhangsan',PASSWORD('45612354648'),0);

在这里插入图片描述

3.6.2 更新数据

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

示例:

UPDATE newclass SET passwd=PASSWORD('') WHERE name='zhangsan';

在这里插入图片描述

3.6.3 删除数据

DELETE FROM 表名 WHERE 条件;

在这里插入图片描述

3.6.4 清空表内数据

DELETE FROM 表名;        -- 可回滚,保留自增ID
TRUNCATE TABLE 表名;     -- 不可回滚,重置自增ID
  • DELETE 可带 WHERE 条件,可回滚,速度慢,逐条删除,保留ID自增的结果
  • TRUNCATE 不可回滚,速度快,ID 自增重置,直接清空

3.6.5 回滚

在这里插入图片描述
在MySQL中执行DELETE后无法回滚,这是由MySQL的默认设置和工作机制导致的。

3.6.5.1 回滚失败的根本原因
  1. 自动提交模式(Autocommit)

    • MySQL默认启用autocommit模式(@@autocommit=1
    • 在这种模式下,每个SQL语句都会自动提交,形成一个独立的事务
    • 您的DELETE语句执行后立即自动提交,ROLLBACK时已无事务可回滚
  2. 存储引擎问题

    • MyISAM引擎不支持事务
    • 只有InnoDB等支持事务的引擎才能使用ROLLBACK
3.6.5.2 如何正确使用事务回滚

方法1:显式开启事务(推荐)

-- 开始事务
START TRANSACTION;  -- 或 BEGIN-- 执行删除
DELETE FROM newclass WHERE name='zhangsan';-- 检查影响行数
SELECT ROW_COUNT();-- 如果需要回滚
ROLLBACK;-- 如果确认删除正确
COMMIT;

方法2:临时关闭自动提交

-- 关闭自动提交
SET autocommit = 0;-- 执行删除
DELETE FROM newclass WHERE name='zhangsan';-- 回滚
ROLLBACK;-- 恢复自动提交
SET autocommit = 1;
3.6.5.3 已提交DELETE的数据恢复方案

如果DELETE已经提交,可以尝试以下方法恢复数据:

1. 使用binlog恢复(需提前开启binlog)

# 查找删除操作的时间点和位置
mysqlbinlog --start-datetime="删除前时间" --stop-datetime="删除后时间" \/var/lib/mysql/mysql-bin.000123 | grep -A 10 "DELETE FROM newclass"mysqlbinlog --start-datetime="2025-09-12 22:00:00" \--stop-datetime="2025-09-12 22:16:00" \/var/lib/mysql/mysql-bin.000123# 查找到具体位置后,恢复数据,结合日常备份选择删除前位置,也可以恢复到某一时间点
mysqlbinlog --start-position=删除前位置 --stop-position=删除后位置 \/var/lib/mysql/mysql-bin.000123 | mysql -u root -p
mysqlbinlog --start-position=删除前位置 --stop-position=删除后位置 \/var/lib/mysql/mysql-bin.000123 | mysql -u root -p

企业中一般会开启binlog其目的是:数据恢复、主从复制和数据审计,而不是单纯为了数据被误删除

2. 使用备份恢复

# 从最近的备份恢复单个表
mysql -u root -p dbname < backup_file.sql

3. 使用第三方工具

  • MySQL Enterprise Backup
  • Percona XtraBackup
  • mydumper/myloader
3.6.5.4 预防措施
  1. 重要操作前备份数据

    -- 创建临时备份表
    CREATE TABLE newclass_backup_20230501 SELECT * FROM newclass WHERE name='zhangsan';
    
  2. 使用事务包装所有写操作

    START TRANSACTION;
    -- 执行操作...
    COMMIT;
    
  3. 设置安全删除习惯

    -- 先查询确认
    SELECT * FROM newclass WHERE name='zhangsan';-- 再删除
    DELETE FROM newclass WHERE name='zhangsan';
    
  4. 考虑使用软删除

    ALTER TABLE newclass ADD COLUMN is_deleted TINYINT DEFAULT 0;-- 替代DELETE
    UPDATE newclass SET is_deleted = 1 WHERE name='zhangsan';
    
3.6.5.5 检查当前事务设置
-- 查看自动提交状态
SELECT @@autocommit;-- 查看当前会话的事务隔离级别
SELECT @@transaction_isolation;-- 查看表使用的存储引擎
SHOW TABLE STATUS LIKE 'newclass';

记住:在MySQL中,只有显式开启事务或关闭autocommit后,ROLLBACK才能生效。生产环境中执行DELETE前务必先备份数据或使用事务!

3.7 DQL 操作(数据查询)

3.7.1 查询数据

SELECT 字段1,字段2 FROM 表名 WHERE 条件;
SELECT * FROM 表名;

3.7.2 限制查询结果

SELECT * FROM 表名 LIMIT 起始行, 查询条数;
SELECT * FROM 表名 LIMIT 2;       -- 显示前2行
SELECT * FROM 表名 LIMIT 2,3;     -- 从第2行开始显示3行,第一个数从0开始计数

3.7.3 竖向显示结果

SELECT * FROM 表名\G

3.8 表高级操作

3.8.1 临时表

临时表将会在连接断开时自动删除。

CREATE TEMPORARY TABLE 表名 (...);

3.8.2 克隆表

-- 仅复制表结构
CREATE TABLE 新表 LIKE 旧表;-- 复制表结构和数据
CREATE TABLE 新表 AS SELECT * FROM 旧表;

在这里插入图片描述
在这里插入图片描述

3.9 用户管理

3.9.1 创建用户

CREATE USER '用户名'@'来源地址' IDENTIFIED BY '密码';

在这里插入图片描述

3.9.2 查看用户

USE mysql;
SELECT User, Host, authentication_string FROM user;

在这里插入图片描述

3.9.3 删除用户

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

在这里插入图片描述

3.9.4 修改密码

SET PASSWORD = PASSWORD('新密码');  -- 当前用户
SET PASSWORD FOR '用户'@'来源地址' = PASSWORD('新密码');  -- 其他用户

在这里插入图片描述

3.9.5 忘记 root 密码处理

  1. 修改 /etc/my.cnf 添加:
[mysqld]
skip-grant-tables
  1. 重启 MySQL 服务并直接登录
  2. 修改密码:
UPDATE mysql.user SET AUTHENTICATION_STRING=PASSWORD('新密码') WHERE user='root';
FLUSH PRIVILEGES;
  1. 删除 skip-grant-tables 并重启 MySQL

3.10 用户授权管理

3.10.1 授权用户

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

在这里插入图片描述

在5.7之前或更早的版本可直接使用以下命令创建用户并赋权:
GRANT SELECT, UPDATE, INSERT ON test.info TO ‘cio’@‘%’ IDENTIFIED BY ‘abc123’;
但这种语法已在8.0被弃用,如果要正确创建需要使用下面的语法:
– 创建用户(如果不存在)
CREATE USER IF NOT EXISTS ‘cio’@‘%’ IDENTIFIED BY ‘abc123’;
– 授予权限
GRANT SELECT, UPDATE, INSERT ON test.info TO ‘cio’@‘%’;

3.10.2 查看授权

SHOW GRANTS FOR '用户名'@'来源地址';

在这里插入图片描述

3.10.3 撤销权限

REVOKE 权限列表 ON 数据库.FROM '用户名'@'来源地址';
REVOKE ALL ON *.* FROM 'lisi'@'%';

在这里插入图片描述

3.11 权限说明

权限功能
SELECT查询数据
INSERT插入数据
UPDATE修改数据
DELETE删除数据
CREATE创建表/数据库
DROP删除表/数据库
ALTER修改表结构
INDEX索引操作
ALL PRIVILEGES所有权限

总结

本文围绕数据库核心知识展开,明确了数据库在信息系统中的核心地位,系统梳理了其发展脉络 —— 从早期层次 / 网状型数据库,到主流的关系型数据库,再到适配高并发场景的非关系型数据库,并清晰对比了两类数据库的结构、优缺点与适用场景(如关系型适合结构化数据与复杂查询,非关系型适合高并发与非结构化数据)。

在实践层面,本文详细给出了数据库安装的环境配置、编译步骤与服务管理方法,并以 MySQL 为例,深入讲解了 DDL/DML/DQL/DCL 等 SQL 语句的应用、表结构操作、用户管理与权限控制等关键操作。

实际业务中,关系型数据库(如 MySQL)与非关系型数据库(如 Redis)常混合使用,以实现数据持久化与高并发处理的互补。掌握本文中的理论知识与 MySQL 实操技能,是设计高效、稳定数据存储方案的基础,也为应对未来数据库技术(如分布式、云数据库)的演进提供了核心支撑。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/99050.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/99050.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/99050.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Elasticsearch HTTPS访问错误解决指南

文章目录&#x1f50d; 原因分析✅ 正确的访问方式&#xff1a;使用 curl -k https://...&#x1f510; 你需要知道 elastic 用户的密码方法 1&#xff1a;查看首次生成的密码&#xff08;如果刚安装&#xff09;方法 2&#xff1a;重置密码✅ 成功示例&#x1f389; 总结&…

Neural ODE原理与PyTorch实现:深度学习模型的自适应深度调节

对于神经网络来说&#xff0c;我们已经习惯了层状网络的思维&#xff1a;数据进来&#xff0c;经过第一层&#xff0c;然后第二层&#xff0c;第三层&#xff0c;最后输出结果。这个过程很像流水线&#xff0c;每一步都是离散的。 但是现实世界的变化是连续的&#xff0c;比如…

Elasticsearch面试精讲 Day 16:索引性能优化策略

【Elasticsearch面试精讲 Day 16】索引性能优化策略 在“Elasticsearch面试精讲”系列的第16天&#xff0c;我们将深入探讨索引性能优化策略。这是Elasticsearch高频面试考点之一&#xff0c;尤其在涉及高并发写入、海量日志处理或实时数据分析场景时&#xff0c;面试官常通过…

ESP32-C3 入门09:基于 ESP-IDF + LVGL + ST7789 的 1.54寸 WiFi 时钟(SquareLine Studio 移植)

一. https://github.com/nopnop2002/esp-idf-st7789 1. 前言 2. 开发环境准备 2.1 硬件清单 ESP32-C3 开发板ST7789 1.54 寸 LCD其他辅助元件&#xff08;杜邦线、电源&#xff09; 2.2 软件安装 ESP-IDF 环境安装&#xff08;WindowsVScode&#xff09;VSCode 插件配置LV…

PINN物理信息神经网络驱动的三维声波波动方程求解MATLAB代码

MATLAB 代码实现了一个基于物理信息神经网络&#xff08;Physics-Informed Neural Network, PINN&#xff09;的三维波动方程求解器。以下是详细分析&#xff1a;&#x1f9e0; 一、主要功能&#x1f517; 二、逻辑关联 代码结构清晰&#xff0c;分为五个主要部分&#xff1a; …

leetcode33(最小栈)

设计一个支持 push &#xff0c;pop &#xff0c;top 操作&#xff0c;并能在常数时间内检索到最小元素的栈。实现 MinStack 类:MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。void pop() 删除堆栈顶部的元素。int top() 获取堆栈顶部的元素。int getMin(…

TDesign学习:(二)i18n配置与使用

配置 src/locales/lang/en_US/pages 目录下对应的各个模块语言的对象

k8s 内置的containerd配置阿里云个人镜像地址及认证

原因&#xff1a;阿里云仓库必须使用凭证登录&#xff0c;不然无法进行镜像拉取&#xff01;1.生成自己的凭证信息# 格式&#xff1a;阿里云仓库用户名:凭证密码 echo -n myuser:mypass | base64 #生成的加密凭证 bXl1c2VyOm15cGFzcw2.修改containerd的镜像仓库配置vi /etc/co…

Python实战:HTTP接口数据获取与PostgreSQL存储系统

项目背景 项目结构 关键技术点 1. 灵活的HTTP请求处理 2. 自动表结构生成与字段类型推断 3. 健壮的数据库操作与错误处理 4. 配置驱动的设计理念 功能实现 1. 数据获取流程 2. 命令行参数支持 2. 数据处理与字段排除 项目扩展与优化方向 结语 项目背景 在日常开发和数据分析工…

递归,搜索与回溯算法

递归→搜索→回溯 名词解释 递归 1.什么是递归 形象地说就是函数自己调用自己。 例子&#xff1a; 二叉树的遍历-后序遍历 void dfs(treenode* root) {//细节 - 出口if(root NULL) return;dfs(root->left);dfs(root->right);printf(root->val); }快排 void quickSort…

【OpenAPI】OpenAPI 3.0x 格式解析技术指南

OpenAPI 格式解析技术指南 概述 OpenAPI&#xff08;原名 Swagger&#xff09;是一种用于描述 REST API 的规范格式&#xff0c;它提供了标准化的方式来定义 API 的结构、参数、响应等信息。本文将深入探讨如何解析 OpenAPI 文档&#xff0c;并基于实际项目中的 openapi-pars…

【亲测有效】解决 “Batch script contains DOS line breaks (\r\n)” 报错

【亲测有效】解决 “Batch script contains DOS line breaks (\r\n)” 报错 适用场景&#xff1a;在 Linux/Slurm 集群上 sbatch 提交脚本或运行 Shell 脚本时遇到 “DOS line breaks (\r\n) instead of UNIX line breaks (\n)” 的报错。 文章目录【亲测有效】解决 “Batch sc…

动态 SQL 标签对比表

动态 SQL 标签对比表标签用途关键属性默认行为<if>条件判断test条件成立则拼接<where>处理 WHERE无去除 AND/OR 开头&#xff0c;加 WHERE<set>处理 SET无去除末尾逗号&#xff0c;加 SET<foreach>遍历集合collection, item, separator无默认&#xff…

征程 6 灰度图部署链路介绍

一、为什么是灰度图 相较于 RGB 三通道图像&#xff0c;灰度图仅保留亮度信息&#xff08;Y 分量&#xff09;&#xff0c;数据量减少 2/3&#xff0c;相比于常用的 NV12 图像&#xff0c;数据量减少 1/3&#xff0c;内存占用与计算负载显著降低。对于下游网络结构而言&#xf…

计算机毕业设计 基于Hadoop的健康饮食推荐系统的设计与实现 Java 大数据毕业设计 Hadoop毕业设计选题【附源码+文档报告+安装调试】

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python、大数据、人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&…

基于海康SDK的C++实时视频流逐帧抓取存图小工具

目录 效果 项目 使用 代码 下载 效果 项目 使用 PlayDemo.exe <IP> <Port> <Username> <Password> 代码 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string> #include <iostream> #include <Windows.…

windows|引用账户被锁定 且暂时无法登录

问题描述尴了个尬&#xff0c;一直认为笔记本锁屏密码记得很牢靠&#xff0c;没想到因为少敲了一个点&#xff08;.&#xff09;&#xff0c;多次输入登陆失败&#xff0c;导致账户被锁定了&#xff0c;提示&#xff1a;引用账户被锁定 且暂时无法登录。然后用手机搜索了一下&a…

系统核心解析:深入操作系统内部机制——进程管理与控制指南(三)【进程优先级/切换/调度】

♥♥♥~~~~~~欢迎光临知星小度博客空间~~~~~~♥♥♥ ♥♥♥零星地变得优秀~也能拼凑出星河~♥♥♥ ♥♥♥我们一起努力成为更好的自己~♥♥♥ ♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥ ♥♥♥如果有什么问题可以评论区留言或者私信我哦~♥♥♥ ✨✨✨✨✨✨个人…

量子-resistant密码学研究

当亚马逊CloudFront在2025年9月宣布为所有TLS连接默认启用后量子加密支持时&#xff0c;这一举措标志着抗量子密码学从学术研究正式迈入大规模实用部署阶段。与此同时&#xff0c;密码学家们发出警告&#xff1a;一台拥有不到一百万噪声量子比特的计算机&#xff0c;可能在一周…

ARM 架构的存储器模型

ARM 架构的存储器模型 ARM 的存储器模型是一个相对复杂但设计精密的体系&#xff0c;它定义了处理器如何与内存进行交互&#xff0c;包括内存访问的顺序、可见性以及缓存行为等。这对于理解多核编程、并发控制和底层系统性能至关重要。 ARM 架构&#xff0c;特别是 ARMv8 及以后…