【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 mysqldservice 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时直接输入quitexit\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 索引
哈希索引
全文搜索索引
聚簇索引
数据缓存
索引缓存
压缩数据
加密数据(通过函数)
存储成本(空间使用) 不适用 非常低
内存成本 中等
批量插入速度 非常高
集群数据库支持
复制支持
外键支持
备份/时间点恢复
查询缓存支持
数据字典更新统计
相关推荐
Acrelhuang19 分钟前
安科瑞5G基站直流叠光监控系统-安科瑞黄安南
大数据·数据库·数据仓库·物联网
十叶知秋1 小时前
【jmeter】jmeter的线程组功能的详细介绍
数据库·jmeter·性能测试
瓜牛_gn3 小时前
mysql特性
数据库·mysql
奶糖趣多多4 小时前
Redis知识点
数据库·redis·缓存
CoderIsArt5 小时前
Redis的三种模式:主从模式,哨兵与集群模式
数据库·redis·缓存
师太,答应老衲吧7 小时前
SQL实战训练之,力扣:2020. 无流量的帐户数(递归)
数据库·sql·leetcode
Yaml48 小时前
Spring Boot 与 Vue 共筑二手书籍交易卓越平台
java·spring boot·后端·mysql·spring·vue·二手书籍
Channing Lewis8 小时前
salesforce case可以新建一个roll up 字段,统计出这个case下的email数量吗
数据库·salesforce
追风林8 小时前
mac 本地docker-mysql主从复制部署
mysql·macos·docker
毕业设计制作和分享9 小时前
ssm《数据库系统原理》课程平台的设计与实现+vue
前端·数据库·vue.js·oracle·mybatis