当前位置: 首页 > news >正文

MySQL数据库(一)—— 数据库基础与MySQL安装管理指南

文章目录

  • 前言
  • 一、数据库概述
    • 1.1 前置知识
    • 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 NoSQL优点
      • 1.5.2 NoSQL缺点
      • 1.5.3 Redis与Memcached对比
    • 1.6 关系型与非关系型数据库对比
    • 1.7 小结
  • 二、MySQL安装与配置
    • 2.1 环境准备
    • 2.2 源码解压与依赖处理
    • 2.3 CMake编译配置
    • 2.4 MySQL配置
      • 2.4.1 权限设置
      • 2.4.2 配置文件修改
    • 2.5 环境变量设置
    • 2.6 数据库初始化
    • 2.7 服务管理
    • 2.8 账号密码管理
    • 2.9 一键安装mysql一键安装脚本
  • 三、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 修改表结构
    • 3.6 DML操作(表数据管理)
      • 3.6.1 插入数据
      • 3.6.2 更新数据
      • 3.6.3 删除数据
      • 3.6.4 清空表
    • 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 权限说明
  • 总结

前言

在当今数据驱动的时代,数据库作为信息系统的核心组成部分,承担着数据存储、管理和维护的重要职责。无论是互联网企业、金融系统还是日常应用,数据库技术都发挥着不可替代的作用。掌握数据库基础知识及其实际应用,对于IT从业者而言是必备技能。

本文将从数据库的基本概念讲起,逐步深入到MySQL数据库的安装配置与日常管理操作,旨在为初学者和有一定经验的开发者提供一个系统、全面的学习指南。


一、数据库概述

1.1 前置知识

在企业应用架构中,数据库通常作为数据存储与管理的核心组件。常见的架构模式包括:

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

数据库在这些架构中负责存储和管理核心业务数据,例如:

  • 微信:用户聊天记录、语音、图片、视频等
  • 外卖平台(如美团、饿了么):订单信息、支付记录、商家数据
  • 游戏(如绝地求生、王者荣耀):玩家信息、装备数据、对战记录

1.2 数据库基本概念

1.2.1 数据

  • 定义:描述客观事物的符号记录(Data),包括数字、文字、图像、声音等。
  • 存储方式:
    • 以记录形式存储,统一格式。
    • 相同类型的数据存放在一起(如“学生”数据不会和“图书”混在一起)。
  • 例子:班级同学 → 一名同学是一条记录,每条记录有多个属性(学号、姓名、性别)。
  • 数据库的保存形式:
    • MySQL 服务 → 数据库 → 数据表 → 行(记录) + 列(字段)

1.2.2 表

表是数据库中数据组织的基本单位,表结构 = 行(记录) + 列(字段)。其特点包括:

  • 记录由字段组成,字段由字符或数字构成
  • 可供多用户共享访问
  • 冗余度低,数据独立性高

1.2.3 数据库

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

1.2.4 数据库管理系统(DBMS)

DBMS是用于操作和管理数据库的软件系统。

主要功能包括:

  1. 数据库的创建与维护(建表、转储与恢复、重组、性能监视)
  2. 数据定义(数据结构、存储方式、保密模式等)
  3. 数据操作(增删改查、统计等)
  4. 运行管理(并发控制、权限管理等)
  5. 通信接口(与其他软件系统交互)

1.2.5 数据库系统(DBS)

在这里插入图片描述

数据库系统是一个完整的人机系统,包括:

  • 硬件
  • 操作系统
  • 数据库
  • DBMS
  • 应用软件
  • 用户(包括DBA)

DBA(数据库管理员)负责数据库的备份恢复、性能优化、用户管理等任务。

常见的数据库应用软件包括Navicat、各类管理信息系统(如人事、财务系统)等。

DBMS的工作流程通常包括

  1. 接收用户或应用程序的请求
  2. 将请求转换为底层操作指令
  3. 执行数据库操作
  4. 获取操作结果
  5. 对结果进行格式化
  6. 将结果返回给用户

1.3 数据库发展史

1.3.1 第一阶段:层次型/网状型数据库

代表产品:IMS(IBM,1969年推出)

1.3.2 第二阶段:关系型数据库

1970年,IBM研究员E.F. Codd提出关系模型,核心思想包括:

  • 把数据放在 二维表(行、列)里,而不是像层次型或网状型那样用复杂的指针去连接。
  • 用 数学集合和关系代数来描述和操作数据(比如选择、投影、连接)。

代表产品:

  • System R(IBM开发的第一个真正实现关系模型的实验性数据库系统)
  • Ingres(加州大学伯克利分校开发,PostgreSQL的前身)

这样数据就更直观、更容易查询和维护。

意义:

  • 关系型数据库的出现,让 SQL(结构化查询语言)成为主流。
  • 现在常见的 MySQL、Oracle、SQL Server 都是关系型数据库的后代。

1.3.3 第三阶段:新型数据库

特点:面向对象、开放性强、支持多平台
趋势:SQL与NoSQL混合使用
代表产品:MariaDB、PostgreSQL、时序数据库等

1.4 关系型数据库

关系型数据库采用E-R模型(实体-关系模型):

  • 行(记录)表示实体
  • 列(字段)表示属性
  • 表与表之间存在关系(一对一、一对多、多对多)

主键是表中唯一标识每条记录的字段,具有唯一性非空特性,类似于学号或身份证号。

常见产品:MySQL、Oracle、SQL Server、DB2、PostgreSQL等。

1.5 非关系型数据库(NoSQL)

  • 定义:NoSQL(Not Only SQL)数据库以非表格形式存储数据,支持键值对、文档、列式等多种数据模型。

  • 典型产品:Redis、Memcached、MongoDB、HBase

  • 应用场景:高并发访问、缓存系统、大数据实时计算

1.5.1 NoSQL优点

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

1.5.2 NoSQL缺点

  1. 不支持SQL语言
  2. 事务处理能力较弱
  3. 复杂查询支持不足
  4. 大部分数据在内存,内存存储成本较高

1.5.3 Redis与Memcached对比

  • 相同点:均用于缓存热点数据,基于内存运行,速度快
  • 不同点:Redis支持数据持久化;Memcached纯内存存储,断电数据丢失

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

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

1.7 小结

1、主流数据库系统包括关系型(如MySQL、Oracle)和非关系型(如Redis、MongoDB)。
2、DBMS作为桥梁,负责接收和处理数据操作请求。
3、在实际应用中,通常根据需求选择合适的数据库类型:

  • 数据结构化、关系清晰:选择关系型数据库
  • 高并发、非结构化数据、大数据分析:选择非关系型数据库
  • 混合使用:如Redis作缓存,MySQL作持久化存储

数据库是数据的有序集合,DBMS 负责管理,发展历程从关系型到非关系型,实际应用常常结合使用来兼顾数据持久化和高并发性能。


二、MySQL安装与配置

2.1 环境准备

安装必要的编译工具和依赖库:

yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake
- gcc / gcc-c++:编译工具
- ncurses / ncurses-devel:字符终端交互库
- bison:语法分析器
- cmake:MySQL 编译工具

创建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.3 CMake编译配置

进入源码目录:

cd /opt/mysql-5.7.17/

执行cmake配置:

cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DSYSCONFDIR=/etc \
-DSYSTEMD_PID_DIR=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8  \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=/usr/local/boost \
-DWITH_SYSTEMD=1

编译并安装:

make -j 4 && make install

注意:如CMake配置出错,需删除CMakeCache.txt后重新执行。

注:上面每个配置说明

cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \		#指定mysql的安装路径
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \ #指定mysql进程监听套接字文件(数据库连接文件)的存储路径
-DSYSCONFDIR=/etc \                             #指定配置文件的存储路径:/etc/my.cnf
-DSYSTEMD_PID_DIR=/usr/local/mysql \            #指定进程文件的存储路径
-DDEFAULT_CHARSET=utf8  \                       #指定默认使用的字符集编码,如 utf8
-DDEFAULT_COLLATION=utf8_general_ci \			#指定默认使用的字符集校对规则
-DWITH_EXTRA_CHARSETS=all \						#指定支持其他字符集编码
-DWITH_INNOBASE_STORAGE_ENGINE=1 \              #安装INNOBASE存储引擎
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \               #安装ARCHIVE存储引擎 
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \             #安装BLACKHOLE存储引擎 
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \            #安装FEDERATED存储引擎 
-DMYSQL_DATADIR=/usr/local/mysql/data \         #指定数据库文件的存储路径
-DWITH_BOOST=/usr/local/boost \     #指定boost的路径,若使用mysql-boost集成包安装则-DWITH_BOOST=boost
-DWITH_SYSTEMD=1								#生成便于systemctl管理的文件存储引擎选项:
MYISAM,MERGE,MEMORY和cSv引擎是默认编译到服务器中,并不需要明确地安装。静态编译一个存储引擎到服务器,使用-DWITH engine STORAGE ENGINE= 1
可用的存储引擎值有:ARCHIVE,BLACKHOLE,EXAMPLE,FBDERATBD,IMNOBASB(InnoDB),PARTTTON(partitioning support),和PERFSCHEMA(Performance schema)

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]
port = 3306
socket=/usr/local/mysql/mysql.sock
default-character-set=utf8[mysqld]
user = mysql
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
port = 3306
character-set-server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket=/usr/local/mysql/mysql.sock
bind-address = 0.0.0.0
skip-name-resolve
max_connections=2048
default-storage-engine=INNODB
max_allowed_packet=16M
server-id = 1
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
socket=/usr/local/mysql/mysql.sock
auto-rehash

详细说明


[client] 客户端配置port = 3306:客户端连接 MySQL 的端口,默认是 3306。
socket=/usr/local/mysql/mysql.sock:客户端通过 Unix socket 文件连接 MySQL(Linux/Unix 环境)。
default-character-set=utf8:默认字符集为 UTF-8。[mysqld] 服务器端配置user = mysql:MySQL 服务以 `mysql` 用户身份运行。
basedir=/usr/local/mysql:MySQL 安装目录。
datadir=/usr/local/mysql/data:MySQL 数据库文件存放目录。
port = 3306:MySQL 服务监听端口。
character-set-server=utf8:服务器默认字符集 UTF-8。
pid-file = /usr/local/mysql/mysqld.pid:存放 MySQL 进程 ID 的文件路径。
socket=/usr/local/mysql/mysql.sock:服务器端 socket 文件路径。
bind-address = 0.0.0.0:允许任意 IP 连接 MySQL(0.0.0.0 表示监听所有网卡)。
skip-name-resolve:关闭 DNS 解析,使用 IP 地址验证用户,提高连接速度。
max\_connections=2048:最大允许同时连接数。(重点)
default-storage-engine=INNODB:默认存储引擎为 InnoDB。
max\_allowed\_packet=16M:最大允许传输的数据包大小。
server-id = 1:MySQL 唯一 ID,常用于主从复制。
sql\_mode=...:设置 SQL 模式,控制 SQL 语法和数据校验规则,如严格模式、禁止零日期、ANSI 引号模式等。---[mysql] 客户端工具配置port = 3306:客户端连接端口。
default-character-set=utf8:客户端默认字符集 UTF-8。
socket=/usr/local/mysql/mysql.sock:使用 Unix socket 文件连接。
auto-rehash:开启自动补全功能(方便在 `mysql` 命令行中自动补全数据库和表名)。

2.5 环境变量设置

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

在这里插入图片描述

2.6 数据库初始化

cd /usr/local/mysql/bin/
./mysqld \
--initialize-insecure \  # 创建空密码的root账户
--user=mysql \
--basedir=/usr/local/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

在这里插入图片描述

2.9 一键安装mysql一键安装脚本

#!/bin/bash# 检查是否为 root 用户
if [ "$(id -u)" != "0" ]; thenecho "错误:此脚本必须以 root 权限运行。"exit 1
fi# 定义下载链接
MYSQL_URL="https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.17.tar.gz"
BOOST_URL="https://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz"# 安装依赖
echo "正在安装依赖包..."
yum -y install wget gcc gcc-c++ ncurses ncurses-devel bison cmake# 创建 MySQL 用户
echo "创建 MySQL 用户..."
if id "mysql" &>/dev/null; thenecho "MySQL 用户已存在,跳过创建"
elseuseradd -s /sbin/nologin mysql
fi# 下载 MySQL 安装包(如果不存在)
if [ ! -f "mysql-5.7.17.tar.gz" ]; thenecho "下载 MySQL 5.7.17..."wget $MYSQL_URL -O mysql-5.7.17.tar.gzif [ $? -ne 0 ]; thenecho "错误:MySQL 下载失败"exit 1fi
elseecho "MySQL 安装包已存在,跳过下载"
fi# 下载 Boost 安装包(如果不存在)
if [ ! -f "boost_1_59_0.tar.gz" ]; thenecho "下载 Boost 1.59.0..."wget $BOOST_URL -O boost_1_59_0.tar.gzif [ $? -ne 0 ]; thenecho "错误:Boost 下载失败"exit 1fi
elseecho "Boost 安装包已存在,跳过下载"
fi# 解压 MySQL
echo "解压 MySQL..."
tar zxvf mysql-5.7.17.tar.gz -C /opt > /dev/null# 解压并设置 Boost
echo "解压并设置 Boost..."
tar zxvf boost_1_59_0.tar.gz -C /usr/local/ > /dev/null
mv /usr/local/boost_1_59_0 /usr/local/boost# 编译安装 MySQL
echo "开始编译 MySQL (这可能需要较长时间)..."
cd /opt/mysql-5.7.17/cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DSYSCONFDIR=/etc \
-DSYSTEMD_PID_DIR=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8  \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=/usr/local/boost \
-DWITH_SYSTEMD=1 > /dev/null# 获取 CPU 核心数
CORES=$(grep -c ^processor /proc/cpuinfo)
echo "检测到系统有 $CORES 个CPU核心,使用 $CORES 核心进行编译..."
make -j $CORES && make install # 设置权限
echo "设置文件权限..."
chown -R mysql:mysql /usr/local/mysql/# 创建配置文件
echo "创建 MySQL 配置文件..."
cat > /etc/my.cnf << EOF
[client]
port = 3306
socket=/usr/local/mysql/mysql.sock
default-character-set=utf8[mysqld]
user = mysql
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
port = 3306
character-set-server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket=/usr/local/mysql/mysql.sock
bind-address = 0.0.0.0
skip-name-resolve
max_connections=2048
default-storage-engine=INNODB
max_allowed_packet=16M
server-id = 1
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
socket=/usr/local/mysql/mysql.sock
auto-rehash
EOFchown mysql:mysql /etc/my.cnf# 设置环境变量
echo "设置环境变量..."
echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
source /etc/profile# 初始化 MySQL
echo "初始化 MySQL..."
cd /usr/local/mysql/bin/
./mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data# 设置系统服务
echo "设置系统服务..."
cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
systemctl daemon-reload
systemctl start mysqld.service
systemctl enable mysqld
# 等待mysqld启动
sleep 5
# 检查 MySQL 是否启动
echo "检查 MySQL 服务状态..."
if systemctl is-active --quiet mysqld; thenecho "MySQL 服务已成功启动"
elseecho "警告:MySQL 服务启动失败,请检查错误日志"exit 1
fi# 检查端口监听
echo "检查 MySQL 端口监听..."
netstat -anpt | grep 3306 || echo "警告:未检测到 MySQL 端口监听,可能需要等待几秒钟后重试"# 设置 root 密码
echo "正在设置 MySQL root 密码..."
read -s -p "请输入新的 MySQL root 密码: " MYSQL_ROOT_PASSWORD# 设置密码(初始密码为空,直接设置新密码)
echo "" | mysqladmin -u root password "$MYSQL_ROOT_PASSWORD"if [ $? -eq 0 ]; thenecho "MySQL root 密码设置成功"
elseecho "错误:密码设置失败,可能是 MySQL 服务尚未完全启动"echo "请等待几秒后手动执行: mysqladmin -u root password '您的密码'"exit 1
fi# 测试登录
echo "测试 MySQL 连接..."
mysql -u root -p"$MYSQL_ROOT_PASSWORD" -e "SELECT @@version;" >/dev/null 2>&1if [ $? -eq 0 ]; thenecho "MySQL 安装和配置成功完成!"echo "Root 密码: $MYSQL_ROOT_PASSWORD"echo "MySQL 已启动并设置为开机自启"echo echo "请手动执行以下命令使环境变量生效:"echo "source /etc/profile"echo "请手动执行以下命令使环境变量生效:"echo "source /etc/profile"echo "请手动执行以下命令使环境变量生效:"echo "source /etc/profile"
elseecho "错误:MySQL 连接测试失败"echo "请检查 MySQL 服务状态并手动测试连接"
fi

三、MySQL数据库管理

3.1 数据库基本操作

3.1.1 查看数据库信息

SHOW DATABASES;

用途:显示当前MySQL服务器中的所有数据库。
在这里插入图片描述

3.1.2 切换数据库

USE 数据库名;

用途:切换到指定数据库进行操作。

3.1.3 查看数据库中的表

SHOW TABLES;
SHOW TABLES IN 数据库名;

用途:显示当前或指定数据库中的所有数据表。
在这里插入图片描述

3.1.4 查看表结构

DESCRIBE 表名;

在这里插入图片描述

输出信息包括:

  • Field:字段名
  • Type:数据类型
  • Null:是否允许为空
  • Key:键类型(主键、唯一键等)
  • Default:默认值
  • Extra:额外信息(如自增属性)

3.2 常用字段数据类型

类型说明示例
INT整型id INT
FLOAT单精度浮点,4 字节,可表示小数score FLOAT
DOUBLE双精度浮点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)

注意:CHAR类型长度不足时会补空格,超出长度时低版本截断,高版本报错。
主键唯一,可由多个字段组成(联合主键)。

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 szsx_school;
USE szsx_school;
CREATE TABLE yjs0805 (id INT NOT NULL,name CHAR(10) NOT NULL,score DECIMAL(5,2),passwd CHAR(48) DEFAULT '',PRIMARY KEY (id)
);
DESC yjs0805;

常用字段约束:

  • NOT NULL:非空
  • DEFAULT:默认值
  • PRIMARY KEY:主键
  • UNIQUE KEY:唯一键
  • AUTO_INCREMENT:自增长

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

3.5.3 删除表

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

在这里插入图片描述

3.5.4 删除数据库

DROP DATABASE 数据库名;

在这里插入图片描述

3.5.5 修改表结构

-- 修改表名
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 yjs0805 (id, name, score, passwd) VALUES (1,'zhangsan',70.5,PASSWORD('123456'));

在这里插入图片描述

3.6.2 更新数据

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

示例:

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

在这里插入图片描述

3.6.3 删除数据

DELETE FROM 表名 WHERE 条件;

在这里插入图片描述

3.6.4 清空表

-- DELETE方式(可回滚)
DELETE FROM 表名;-- TRUNCATE方式(不可回滚,速度快)
TRUNCATE TABLE 表名;

在这里插入图片描述

  • DELETE 可带 WHERE 条件,可回滚,速度慢
  • TRUNCATE 不可回滚,速度快,ID 自增重置

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 1,2;     -- 从第1行开始显示2行

在这里插入图片描述

3.7.3 竖向显示结果

SELECT * FROM 表名\G

在这里插入图片描述

3.8 表高级操作

3.8.1 临时表

CREATE TEMPORARY TABLE 表名 (...);

在这里插入图片描述

  • 临时表只存在于当前连接,会在连接关闭时自动销毁
  • 可进行增删改查操作

3.8.2 克隆表

-- 仅复制表结构
CREATE TABLE 新表 LIKE 旧表;-- 如果想要插入数据
insert into 新表 select * from 旧表;

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

-- 复制表结构和数据
CREATE TABLE 新表 AS SELECT * FROM 旧表;(会丢失主键)
--或者
CREATE TABLE 新表 (SELECT * FROM 旧表);

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

3.9 用户管理

3.9.1 创建用户

CREATE USER '用户名'@'来源地址' IDENTIFIED BY '密码';
  • localhost:本地登录
  • %:允许任意 IP 登录
  • 密码可使用明文或加密方式

在这里插入图片描述

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服务并直接登录

在这里插入图片描述

  1. 执行密码修改:
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 '密码';
  • 权限示例:SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, INDEX, EXECUTE, ALL(ALL表示所有权限)
  • *.* 表示所有数据库和表

示例:

GRANT SELECT ON school.* TO 'zhangsan'@'localhost' IDENTIFIED BY 'abc123';
GRANT ALL PRIVILEGES ON *.* TO 'lisi'@'%' IDENTIFIED BY '123456';

在这里插入图片描述

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删除数据库/表
INDEX创建索引
ALTER修改表结构
EXECUTE执行存储过程
CREATE VIEW创建视图
SHOW VIEW查看视图
CREATE ROUTINE创建存储过程
ALTER ROUTINE修改存储过程
EVENT创建事件
TRIGGER创建触发器
ALL PRIVILEGES所有权限

总结

本文系统介绍了数据库的基础概念、发展历程以及MySQL数据库的安装配置和日常管理操作。主要内容包括:

  1. 数据库基础:阐述了数据、表、数据库、DBMS和DBS的基本概念,介绍了关系型与非关系型数据库的特点及适用场景。

  2. MySQL安装:详细讲解了MySQL 5.7的源码编译安装过程,包括环境准备、编译配置、安装及初始化步骤。

  3. 数据库管理:全面介绍了MySQL的常用操作,包括数据库和表的创建维护、数据增删改查、用户权限管理等实用技能。

通过本文的学习,读者可以建立起完整的数据库知识体系,掌握MySQL数据库的安装配置和基本管理技能,为后续的数据库开发和管理工作打下坚实基础。数据库技术不断发展,建议读者在学习基础知识的同时,关注新技术发展趋势,不断提升自己的技能水平。

提示:在实际生产环境中,请根据具体需求选择合适的数据库类型和配置方案,并始终重视数据安全和备份工作。


文章转载自:

http://1j2fvYkS.zbqry.cn
http://MqLc8kOU.zbqry.cn
http://ga0h3go1.zbqry.cn
http://HE9QEu3Q.zbqry.cn
http://V0VKUn4p.zbqry.cn
http://H2cB7vmw.zbqry.cn
http://eTe38Icd.zbqry.cn
http://7fOzhKrk.zbqry.cn
http://KpxS3qW8.zbqry.cn
http://5RYKFTWT.zbqry.cn
http://TgjgxVBQ.zbqry.cn
http://9qyJK0n1.zbqry.cn
http://6QUASEJk.zbqry.cn
http://0RZz33ac.zbqry.cn
http://xrlCtDE4.zbqry.cn
http://dJJuhnzC.zbqry.cn
http://30BLN8yw.zbqry.cn
http://tszf2enK.zbqry.cn
http://RpJ7vwRe.zbqry.cn
http://NA0IAbVZ.zbqry.cn
http://bjXUOrU7.zbqry.cn
http://hvo6o5r0.zbqry.cn
http://hykwwqMf.zbqry.cn
http://DlG9S3Eg.zbqry.cn
http://kx8H9C50.zbqry.cn
http://RG01guEn.zbqry.cn
http://Z3Fd1UnB.zbqry.cn
http://7fM1jmQz.zbqry.cn
http://k8VU5Fn7.zbqry.cn
http://vCRLgqqw.zbqry.cn
http://www.dtcms.com/a/381257.html

相关文章:

  • 京东商品详情 API 全解析:合规对接与 B2C 场景实战指南
  • 高德地图从零开始:Key 申请到项目初始化全流程教程(Vue3 + AMap 2.0)
  • 从跟跑到领跑:OBOO鸥柏触摸屏的军用信息化技术自主之路
  • LLM(三)
  • u盘 修复
  • C++异常处理设计与实践:主动抛出异常的处理策略
  • 嵌入式数据结构笔记三——单向链表Ⅲ
  • Ampace厦门新能安校招/社招Verify测评演绎数字推理行测真题题库及远程助攻
  • ORM框架SQLAlchemy工具:模型类(Model Class)和实体类(Entity Class)介绍
  • CSS布局 - 定位 -- 笔记4
  • 智能过滤器系统:基于实际数据的动态Admin过滤方案
  • 发挥nano banana的最大能力
  • Nvidia GPU 明细表、架构详解
  • 达梦数据库相关操作语句
  • 拓扑排序--算法题
  • transformer 相对位置编码详解
  • 【学习K230-例程20】GT6700-TCP-Server
  • 一文理清合同金额、已确认金额、累计开票金额、最大可开票金额、未票应收金额之间的关系
  • 复杂任务拆解艺术:如何通过多次对话与提示词工程高效解决难题
  • 函数(其实写文章是为了体验和练习LateX公式)
  • 盒子模型导读
  • 《动物营养与饲料学》复习题五套(含答案)
  • 如何选择?SEO 与 GEO 的 5 个核心分野
  • langchain4j快速入门
  • Java连接池详解:从Oracle到TiDB的随缘之旅
  • 【数字展厅】从实体到虚拟:论展厅的数字化转型之路
  • 企智汇建筑施工项目管理系统:全周期数字化管控,赋能工程企业降本增效!​建筑工程项目管理软件!建筑工程项目管理系统!建筑项目管理软件企智汇软件
  • map multimap认识及使用
  • 【Settings】展讯平台设备信息相关参数的获取
  • Python 0910