【MySQL】数据库入门基础

文章目录

一、数据库的概念

1. 什么是数据库

存储数据用文件就可以了,文件已经提供了数据存储功能,为什么还要弄个数据库?因为在用户角度看来,文件没有提供非常好的数据管理能力。
文件保存数据有以下几个缺点:

  • 文件的安全性问题
  • 文件不利于数据查询和管理
  • 文件不利于存储海量数据
  • 文件在程序中控制不方便

数据库存储介质:

  • 磁盘
  • 内存

为了解决上述问题,专家们设计出更加利于管理数据的东西------数据库,数据库能更有效的管理数据。

2. 主流数据库

数据库 介绍
SQL Sever 微软的产品,.Net程序员的最爱,中大型项目。
Oracle 甲骨文产品,适合大型项目,复杂的业务逻辑,并发一般来说不如MySQL。
MySQL 世界上最受欢迎的数据库,属于甲骨文,并发性好,不适合做复杂的业务。主要用在电商,SNS,论坛。对简单的SQL处理效果好。
PostgreSQL 加州大学伯克利分校计算机系开发的关系型数据库,不管是私用,商用,还是学术研究使用,可以免费使用,修改和分发。
SQLite 是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。
H2 是一个用Java开发的嵌入式数据库,它本身只是一个类库,可以直接嵌入到应用项目中。

3. mysql和mysqld的区别

  1. mysql是数据库服务的客户端

  2. mysqld是数据库服务的服务端

  3. mysql的本质是:基于C(mysql)S(mysqld)模式的一种网络服务,所以可以通过netstat命令查询网络连接状态:

    bash 复制代码
    sudo netstat -nltpu

二、MySQL基本使用

1. 安装MySQL服务器

在 CentOS 上安装 MySQL 服务器

  1. 更新系统包:

    sh 复制代码
    sudo yum update -y
  2. 安装 MySQL 存储库 :

    下载并安装 MySQL 的官方 Yum 存储库:

    sh 复制代码
    wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
    sudo rpm -ivh mysql80-community-release-el7-3.noarch.rpm
  3. 安装 MySQL 服务器:

    sh 复制代码
    sudo yum install mysql-server -y
  4. 启动 MySQL 服务并设置开机自启:

    sh 复制代码
    sudo systemctl start mysqld
    sudo systemctl enable mysqld
  5. 获取临时 root 密码 :

    安装完成后,MySQL 会为 root 用户生成一个临时密码,你可以通过以下命令查看:

    sh 复制代码
    sudo grep 'temporary password' /var/log/mysqld.log
  6. 运行安全脚本 :

    使用临时密码登录并运行安全安装脚本来设置 root 密码并配置安全选项:

    sh 复制代码
    sudo mysql_secure_installation

在 Ubuntu 上安装 MySQL 服务器

  1. 更新系统包:

    sh 复制代码
    sudo apt update
    sudo apt upgrade -y
  2. 安装 MySQL 服务器 :

    Ubuntu 18.04 和更高版本自带了 MySQL 5.7 或更高版本的包:

    sh 复制代码
    sudo apt install mysql-server -y
  3. 启动 MySQL 服务并设置开机自启:

    sh 复制代码
    sudo systemctl start mysql
    sudo systemctl enable mysql
  4. 运行安全脚本 :

    安装完成后,运行安全安装脚本来配置 MySQL:

    sh 复制代码
    sudo mysql_secure_installation

    在运行此脚本过程中,你将设置 root 用户的密码,并选择一些安全配置选项,例如删除匿名用户、禁止远程 root 登录、删除测试数据库等。

验证安装

无论是在 CentOS 还是 Ubuntu 上,安装完成后,你都可以通过以下命令登录 MySQL 并验证安装:

sh 复制代码
mysql -u root -p

输入你设置的 root 密码后,就可以进入 MySQL 控制台,验证 MySQL 是否正常运行。

2. 服务器管理

启动服务器

systemctl start mysqld或service mysqld start命令可以启动MySQL服务器。

查看服务器

bash 复制代码
sudo systemctl status mysqld

连接服务器

连接到MySQL服务器:

sql 复制代码
mysql -h127.0.0.1 -P3306 -uroot -p
  • -h:表示你要连接的MySQL服务器所在的主机,127.0.0.1表示本主机。
  • -P:表示你要连接的MySQL服务器所对应的端口号,一般默认是3306。
  • -u:表示用哪一个用户连接MySQL服务器,root表示超级用户。
  • -p:表示该用户对应的密码,密码可以直接跟在-p后面,也可以回车后输入。

此外,如果要连接的是本地的MySQL服务器,那么连接时只需要指明用户名和用户密码即可。如下:

sql 复制代码
mysql -uroot -p

连接到MySQL服务器后,就可以输入各种SQL语句让服务器执行了,当要退出mysql时直接输入quit或exit或\q即可。

停止服务器

通过systemctl stop mysqld命令或service mysqld stop命令可以停止MySQL服务器。

重启服务器

通过systemctl restart mysqld命令或service mysqld restart命令可以重启MySQL服务器。

3. 服务器,数据库,表关系

  1. 所谓安装数据库服务器,只是在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库,这些数据库被存放在一个指定目录底下:

  2. 一个数据库,就对应Linux下的一个同名的目录:

  3. 在一个数据库中建立一张表,本质就是在这个数据库的目录下创建数据文件:

数据库服务器、数据库和表的关系如下:

三、MySQL架构

MySQL 是一个可移植的数据库,几乎能在当前所有的操作系统上运行,如 Unix/Linux、Windows、Mac 和 Solaris。各种系统在底层实现方面各有不同,但是 MySQL 基本上能保证在各个平台上的物理体系结构的一致性。

四、SQL分类

  • DDL【Data Definition Language】数据定义语言,用来维护存储数据的结构

    代表指令: create, drop, alter

  • DML【Data Manipulation Language】数据操纵语言,用来对数据 进行操作

    代表指令: insert,delete,update

    • DML中又单独分了一个DQL【Data Query Language】,数据查询 语言
      代表指令: select
  • DCL【Data Control Language】数据控制 语言,主要负责权限管理和事务

    代表指令: grant,revoke,commit

五、存储引擎

存储引擎是:数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。

MySQL的核心就是插件式存储引擎,支持多种存储引擎。

查看支持的存储引擎

sql 复制代码
show engines;

MySQL支持的几个存储引擎

Engine Support Comment Transactions XA Savepoints
InnoDB DEFAULT Supports transactions, row-level locking, and foreign keys YES YES YES
MRG_MYISAM YES Collection of identical MyISAM tables NO NO NO
MEMORY YES Hash based, stored in memory, useful for temporary tables NO NO NO
BLACKHOLE YES /dev/null storage engine (anything you write to it disappears) NO NO NO
CSV YES CSV storage engine NO NO NO
PERFORMANCE_SCHEMA YES Performance Schema NO NO NO
FEDERATED NO Federated MySQL storage engine NULL NULL NULL
引擎 支持 评论 事务支持 XA 保存点支持
InnoDB 默认 支持事务、行级锁定和外键 是 是 是
MRG_MYISAM 是 相同MyISAM表的集合 否 否 否
MEMORY 是 基于哈希,存储在内存中,适用于临时表 否 否 否
BLACKHOLE 是 /dev/null存储引擎(写入的数据会消失) 否 否 否
MyISAM 是 MyISAM存储引擎 否 否 否
CSV 是 CSV存储引擎 否 否 否
ARCHIVE 是 归档存储引擎 否 否 否
PERFORMANCE_SCHEMA 是 性能模式 否 否 否
FEDERATED 否 联邦MySQL存储引擎 NULL NULL NULL

MySQL存储引擎功能对比

Feature MyISAM BDB Memory InnoDB Archive NDB
Storage Limits No No Yes 64TB No Yes
Transactions (commit, rollback, etc.) ✔ ✔ ✔
Locking granularity Table Page Table Row Row Row
MVCC/Snapshot Read ✔ ✔ ✔
Geospatial support ✔ ✔
B-Tree indexes ✔ ✔ ✔ ✔ ✔
Hash indexes ✔ ✔ ✔
Full text search index ✔ ✔
Clustered index ✔ ✔
Data Caches ✔ ✔ ✔
Index Caches ✔ ✔ ✔
Compressed data ✔ ✔
Encrypted data (via function) ✔ ✔
Storage cost (space used) Low Low N/A High Very Low Low
Memory cost Low Low Medium High Low High
Bulk Insert Speed High High High Low Very High High
Cluster database support ✔ ✔
Replication support ✔ ✔ ✔ ✔
Foreign key support ✔ ✔
Backup/Point-in-time recovery ✔ ✔ ✔
Query cache support ✔ ✔ ✔
Update Statistics for Data Dictionary ✔ ✔ ✔
功能 MyISAM BDB Memory InnoDB Archive NDB
存储限制 否 否 是 64TB 否 是
事务(提交、回滚等) ✔ ✔ ✔
锁定粒度 表 页 表 行 行 行
MVCC/快照读取 ✔ ✔ ✔
地理空间支持 ✔ ✔
B-Tree 索引 ✔ ✔ ✔ ✔ ✔
哈希索引 ✔ ✔ ✔
全文搜索索引 ✔ ✔
聚簇索引 ✔ ✔
数据缓存 ✔ ✔ ✔
索引缓存 ✔ ✔ ✔
压缩数据 ✔ ✔
加密数据(通过函数) ✔ ✔
存储成本(空间使用) 低 低 不适用 高 非常低 低
内存成本 低 低 中等 高 低 高
批量插入速度 高 高 高 低 非常高 高
集群数据库支持 ✔ ✔
复制支持 ✔ ✔ ✔ ✔
外键支持 ✔ ✔
备份/时间点恢复 ✔ ✔ ✔
查询缓存支持 ✔ ✔ ✔
数据字典更新统计 ✔ ✔ ✔
相关推荐
一只鹿鹿鹿11 分钟前
政务外网整体设计方案(PPT)
大数据·数据库·web安全·系统安全·流程图·政务
2603_9651481126 分钟前
社区与学习资源:从入门到精通的API选品学习路径
数据库·人工智能·python·学习·数据挖掘
for_ever_love__28 分钟前
MySQL ORDER BY 排序优化:从 Using filesort 到索引有序扫描(含双路 / 单路排序原理)
java·mysql·优化·存储·by·order·filesort
AI砖家28 分钟前
安全进入 Agent Loop:2027 年 Coding Agent 的决胜点
数据库·安全·codex·vibecoding
wangqiaowq1 小时前
SQL server C盘空间占满的处理
数据库·sql
文人sec1 小时前
SQL基础入门笔记 | 从零基础到掌握核心查询语句
数据库·笔记·sql
数字新视界1 小时前
机房动环监控提升运维效率
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
SelectDB技术团队1 小时前
冷热分层从建到验:Storage Policy 创建、表级与分区级绑定、SHOW TABLETS 验证的完整命令
大数据·数据库·elasticsearch·搜索引擎·数据分析·apache doris·冷热分层
lambo mercy3 小时前
Day3:结构化输出
java·数据库·oracle
派小心.3 小时前
小程序分享链路中来源参数的传递校验
大数据·前端·数据库·人工智能·小程序·数据分析