文章目录
- 一、MYSQL数据库介绍
- 1.1、MySQL数据库的基本概述
- 1.2、MySQL数据库的主要特性
- 1.3、MySQL数据库的技术架构与组件
- 1.4、MySQL数据库的应用与扩展性
- 1.5、MySQL数据库的许可模式与开源生态
- 二、MySQL Workbench和phpMyAdmin介绍
- 2.1、MySQL Workbench介绍
- 2.2、phpMyAdmin介绍
- 三、存储引擎InnoDB、MyISAM、Memory介绍
- 3.1、InnoDB
- 3.2、MyISAM
- 3.3、Memory
- 四、ACID事务是什么
- 五、安装MYSQL
- 六、MYSQL操作
- 6.1、修改密码
- 6.2、登陆mysql数据库
- 6.3、增操作
- 6.4、删操作
- 6.5、改操作
- 6.6、查操作
一、MYSQL数据库介绍
MySQL数据库是一款由瑞典MySQL AB公司开发的关系型数据库管理系统,具有跨平台、高性能、多用户访问、事务和非事务的存储机制等特性。
1.1、MySQL数据库的基本概述
- 定义和历史背景:
MySQL最初由瑞典的MySQL AB公司开发,是一个跨平台的关系数据库系统,拥有客户机/服务器体系结构
- 发展历程与现状
几经转手后,MySQL现属于Oracle公司旗下的产品。它被广泛用于Web应用程序、企业应用程序和移动应用程序等多个领域,是目前最流行的开源关系型数据库之一
1.2、MySQL数据库的主要特性
- 跨平台支持:
MySQL可以在多种操作系统上运行,包括Linux、Windows、macOS等,展现出良好的可移植性
- 性能与可靠性:
MySQL具备高效的数据处理能力和高可靠性,支持多线程操作和多用户并发访问,能够自动进行故障转移和数据恢复
- 易用性与管理工具:
安装和配置过程简单,同时提供了一系列易于使用的管理工具,如MySQL Workbench和phpMyAdmin等,方便了数据库的管理和操作
- 编程语言支持:
支持多种编程语言的API,如C、C++、Python、Java等,使得它能轻松集成到各种应用程序中
- 安全性与连接性:
提供了强大的访问控制功能,确保数据安全;完全网络化的设计允许数据库在因特网上的任何地方被访问,实现数据的便捷共享
1.3、MySQL数据库的技术架构与组件
- 存储引擎:
MySQL支持多种存储引擎,包括但不限于MyISAM、InnoDB、Memory引擎等,每种引擎都有其特定的应用场景和优劣
- 索引和优化:
通过索引提高查询效率,同时MySQL支持查询缓存、分区表等技术来进一步优化性能
- 事务处理:
支持ACID事务,确保数据的一致性和完整性,特别是在InnoDB存储引擎下,支持行级锁定和事务处理
1.4、MySQL数据库的应用与扩展性
- Web应用:
MySQL因其开源、性能优异且易于管理的特点,成为众多Web应用程序的首选数据库解决方案
- 企业级应用:
能够满足企业对于大数据量处理和高并发访问的需求,适用于ERP、CRM等企业级应用系统
- 移动端和物联网应用:
随着移动互联网和物联网的发展,MySQL也在这些领域的数据存储和管理中发挥重要作用
1.5、MySQL数据库的许可模式与开源生态
- 双许可模式:
MySQL采用双重许可模式,用户可以根据GNU通用公共许可证使用社区版,或选择购买商业版以获得额外的企业特性和支持
- 开源生态:
作为一个开源项目,MySQL拥有活跃的开发者社区,不仅能够获取丰富的第三方工具和插件,还能受益于社区对问题的快速响应和解决
二、MySQL Workbench和phpMyAdmin介绍
MySQL Workbench和phpMyAdmin是两款常用的MySQL数据库管理工具,各自具有独特的特点和功能。
2.1、MySQL Workbench介绍
MySQL Workbench是一款由MySQL AB(现属于Oracle)开发的桌面应用程序,提供丰富的数据库设计、管理、优化和SQL开发功能。
- 定义与背景:
MySQL Workbench是由MySQL AB(现为Oracle公司)开发的桌面应用程序,主要用于管理MySQL数据库
- 主要功能:
- 数据建模:
提供ER图、Relational模型和UML模型等多种建模方式,支持正向和逆向工程。
- SQL开发:
具备完整的SQL编辑器,支持语法高亮、自动补全、错误提示等功能,提高SQL编写效率
- 数据库管理:
允许用户创建、删除、备份、恢复数据库,并提供性能优化功能
- 数据迁移:
支持数据迁移工具,帮助进行复杂的数据库迁移操作
- 优势:
- 强大的数据建模和设计功能,适用于大型项目
- 图形化界面直观,易于理解和使用
- 支持Windows、Linux和Mac操作系统
- 适用场景:
适合数据库管理员、开发人员和系统规划师,尤其是需要进行复杂数据库设计和大规模数据处理的情况
2.2、phpMyAdmin介绍
phpMyAdmin是一个基于Web的开源工具,通过Web浏览器访问和管理MySQL数据库,方便用户进行数据库操作和数据查询
- 定义与背景:
phpMyAdmin是一个免费的开源Web应用程序,用于通过Web浏览器管理MySQL数据库
- 主要功能:
- 数据库操作:
支持管理数据库中的各种对象,如表、视图、索引等
- 数据查询:
提供一个SQL编辑器,方便执行SQL查询和脚本
- 数据备份与恢复:
可轻松备份整个数据库或单个表,并支持恢复操作
- 用户管理:
支持用户账户的创建和管理
- 优势:
- 基于Web应用,无需额外软件安装,随时随地通过浏览器访问
- 高度可定制,支持多种主题、插件和语言
- 免费且开源,获得广泛支持和使用
- 适用场景:
适合小型Web应用程序和快速数据库操作,对于只需基本数据库管理功能的用户可以满足需求
三、存储引擎InnoDB、MyISAM、Memory介绍
3.1、InnoDB
InnoDB是MySQL数据库系统中最常用的存储引擎之一,以其强大的事务处理、行级锁定和高效的内存管理而闻名。
InnoDB的设计旨在提供高性能、高可靠性和数据完整性,特别适合需要处理大量数据和高并发请求的应用。
- 事务支持和ACID特性
- 原子性(Atomicity):事务处理过程中,要么全部执行,要么全部不执行,确保数据的一致性。
- 一致性(Consistency):事务使数据库从一个一致状态转移到另一个一致状态,防止数据损坏。
- 隔离性(Isolation):多个事务同时进行时,互不干扰,防止脏读、不可重复读和幻读等问题。
- 持久性(Durability):事务完成后,所有更改永久保存在数据库中,即使系统崩溃也能恢复。
- 行级锁定和多版本并发控制(MVCC)
- 行级锁定:只锁定事务操作涉及的行,而不是整个表,提高并发性能。
- 多版本并发控制(MVCC):通过维护数据多个版本,让读写操作无锁并发执行,进一步提升并发性能。
- 数据和索引结构
- 聚簇索引:InnoDB使用聚簇索引存储数据,数据实际存放在叶节点上,按主键顺序物理存储,如果没有主键则自动生成隐藏的主键。
- B+树索引:采用B+树作为索引结构,提高了数据检索效率。
- 缓冲池和内存管理
- 缓冲池:一块自管理的内存区域,缓存数据页和索引页,减少磁盘I/O,提升性能。
- 内存管理:还包含重做日志缓冲区和额外的内存池,用于支持事务恢复和高性能操作。
- 崩溃恢复和日志系统
- 重做日志(redo log):记录事务变更操作,支持事务的持久性和崩溃后的数据恢复。
- 撤销日志(undo log):记录数据旧版本,支持事务回滚和MVCC。
- 其他关键特性
- 插入缓冲:优化非唯一二级索引插入的性能。
- 两次写机制:避免数据页损坏带来的数据丢失。
- 自适应哈希索引:自动为频繁查询创建哈希索引,提高查询速度。
- 异步I/O操作:提高磁盘I/O性能,减少等待时间。
3.2、MyISAM
MyISAM是MySQL数据库中一种经典且高性能的存储引擎,尽管在新版本的MySQL中默认使用InnoDB,但MyISAM在许多特定应用场景中仍具有独特的优势。
MyISAM以其高读取速度和全文索引支持而著称,特别适合读多写少的场景。
- 特性和用途
- 非事务型:MyISAM不支持事务处理,这使得它不适合需要事务完整性的应用。
- 高速读取:MyISAM以高效的数据读取速度著称,适合执行大量的SELECT查询操作。
- 表级锁定:使用表级锁定而非行级锁定,写入操作会锁定整个表,降低了并发性能,但在读取为主的应用中影响较小。
- 全文索引支持:支持全文搜索功能,适用于需要这类功能的应用,如网站内容管理和搜索引擎。
- 内部结构
- 文件组成:每个MyISAM表由表定义文件(.frm)、数据文件(.MYD)和索引文件(.MYI)组成。
- 数据索引分离:数据和索引分别存放在不同的文件中,有助于独立优化和维护索引。
- 适用场景
- Web和数据仓库应用:由于其快速的读取速度,适用于Web服务器数据库和大数据分析工具。
- 日志记录应用:MyISAM也适用于日志记录,得益于其简单和高速的写入能力。
- 管理与优化
- 表的维护:使用myisamchk工具检查和修复MyISAM表;同时,CHECK TABLE和REPAIR TABLE SQL语句也是重要的维护手段。
- 性能优化措施:调整键缓存大小、使用延迟插入(INSERT DELAYED)、定期分析索引来优化查询计划,以及压缩表和索引以减少磁盘空间占用并提高I/O性能。
- 优缺点
- 优点:读取速度快、资源占用少,支持全文索引,适用于高读取需求的应用。
- 缺点:不支持事务处理和行级锁定,写入时会锁定整个表,并发性能较差,并且可能会因崩溃导致数据不一致。
3.3、Memory
Memory存储引擎是MySQL中一种将数据存储在内存中的存储引擎,由于其极高的访问速度,通常用于临时表或缓存。
- 特点和适用场景
- 高性能:所有数据存储在内存中,存取速度极快,适合对访问速度要求很高的应用场景。
- 非持久化:数据在服务器重启时会丢失,因此不适合需要永久保存的数据。
- 表级锁定:采用表级锁定机制,并发性能较差,但在读取为主的场景下影响不大。
- 文件存储和内部结构
- 文件组成:Memory引擎的表主要将表定义存储在.frm文件中,数据和索引则存储在内存中,不会占用硬盘空间。
- 索引支持:支持哈希索引,可以提高查询速度,尤其是在内存访问的场景下。
- 创建和管理
- 创建Memory表:使用CREATE TABLE语句并在末尾指定ENGINE=MEMORY来创建Memory表。
- 管理策略:由于数据存储在内存中,对Memory表的维护相对较少,但需要注意表的大小和内存的使用情况,避免内存不足导致的性能问题。
- 应用场景和优化
- 临时表使用:Memory表非常适合作为临时表使用,比如存储中间结果、进行复杂的计算等。
- 缓存应用:可以用作缓存经常访问但变更较少的数据,提高系统响应速度。
- 性能优化:虽然Memory表本身速度很快,但在多表操作和复杂查询时,依然需要进行合理的查询优化和使用索引。
四、ACID事务是什么
ACID事务是确保数据库管理系统(DBMS)中数据完整性和一致性的关键概念,代表原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)四个特性。
在数据库系统中,一个事务是指由一系列数据库操作组成的一个完整的逻辑过程,例如银行转账操作包括从原账户扣款和向目标账户加款,这两个操作共同构成一个不可分割的事务。
- 原子性(Atomicity):
- 原子性确保事务中的所有操作要么全部完成,要么全部不完成,不会结束在中间某个环节。如果事务在执行过程中发生错误,会被恢复到事务开始前的状态,就像这个事务从未执行过一样。
- 实现原子性关键在于在事务回滚时能够撤销所有已经成功执行的操作。通常通过undo log(回滚日志)来实现。当事务对数据库进行修改时,系统会生成对应的undo log。如果事务执行失败或调用了回滚命令,便可以利用undo log中的信息将数据恢复到修改之前的状态。
- 一致性(Consistency):
- 一致性确保事务将数据库从一个一致性状态转换到另一个一致性状态。事务执行前后,数据库的完整性约束没有被破坏,数据仍然遵守预设的规则。
- 一致性的核心在于保证事务的执行结果符合预期,避免出现部分操作成功而部分操作失败的情况。例如,在银行转账例子中,转账操作要么完全成功,要么完全不发生,不会停留在一个中间状态。
- 隔离性(Isolation):
- 隔离性能防止多个并发事务之间的交叉执行和相互干扰,确保每个事务在独立的环境下运行。这可以防止多个事务因同时访问和修改同一数据而产生冲突和数据不一致的问题。
- 数据库通过设置不同的隔离级别来实现不同程度的隔离性,包括读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable)。隔离级别越高,事务之间的相互影响越小,但可能会影响系统的性能。
- 持久性(Durability):
- 一旦事务被提交,它对数据库的修改就是永久的,即使系统发生故障也不会导致数据丢失。
- 持久性通常通过redo log(重做日志)来实现。当事务提交时,其修改记录会被写入redo log并同步到磁盘上,确保数据修改即使在系统崩溃后也能被恢复。
五、安装MYSQL
# 更新yum源
[root@httpsl ~]# rpm -Uvh http://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
# 安装mysql
Complete!
[root@httpsl ~]# yum -y install mysql-community-server --nogpgcheck
# 启动mysql并查看状态
[root@httpsl ~]# systemctl start mysqld
[root@httpsl ~]# systemctl status mysqld
# 查看mysql_root初始密码
[root@httpsl ~]# grep 'temporary password' /var/log/mysqld.log |awk '{print $11}'
六、MYSQL操作
6.1、修改密码
# 执行MySQL 数据库初始化命令
[root@iZbp129gypomkv7w7deqpqZ ~]# mysql_secure_installationSecuring the MySQL server deployment.# 临时密码
Enter password for user root: The existing password for the user account root has expired. Please set a new password.# 新密码
New password: # 再次输入新密码
Re-enter new password: Estimated strength of the password: 100
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.# 往下全部y即可
Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Success.By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y- Dropping test database...
Success.- Removing privileges on test database...
Success.Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.All done!
6.2、登陆mysql数据库
[root@iZbp129gypomkv7w7deqpqZ ~]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 5.7.44 MySQL Community Server (GPL)Copyright (c) 2000, 2023, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>
6.3、增操作
- 简单创建库
mysql> create database mydb;
Query OK, 1 row affected (0.00 sec)
- 创建一个名为mydb的数据库,并使用UTF-8字符集和utf8_general_ci排序规则
mysql> create database mysqldb character set utf8 collate utf8_general_ci;
Query OK, 1 row affected (0.00 sec)
- 判断数据库是否存在,不存在则直接创建该数据库,存在,也不会报错
mysql> create database if not exists my_db;
Query OK, 1 row affected (0.00 sec)
- 添加数据表
mysql> create table students(--创建编号列-> stu_num char(8) not null unique,-- 创建名字列-> stu_name varchar(20) not null unique,-- 创建性别列-> stu_gender char(2) not null unique,-- 创建年龄列,年龄为整数-> stu_age int not null unique,-- 创建电话列-> stu_tel char(11) not null unique,-- 创建qq号列-> stu_qq varchar(11) not null unique,-- 创建微信号列-> stu_weixin varchar(100) not null unique);
6.4、删操作
- 删除数据库
mysql> drop database test1_db;
- 判断是否已经删除test1_db数据库,未删除,直接删除,删除,不报错
mysql> drop database if exists test1_db;
- 删除数据表
mysql> drop table students;
- 判断是否已删除,自行删除
mysql> drop table if exists students;
- 删除字段名(列)
mysql> alter table students drop stu_num;
6.5、改操作
- 修改test_db的字符集为gbk
mysql> alter database test_db character set gbk;
- 修改表名
mysql> alter table students rename to studebts_db;
- 修改表的字符集是gbk还是utf-8
mysql> alter table students character set utf-8;
- 在表中新加一个字段(列)
mysql> alter table students add stu_bj varchar(10);
- 修改字段名和类型
mysql> alter table students change stu_num stu_num1 int ;
- 只修改字段类型
mysql> alter table students modify stu_num int;
6.6、查操作
- 显示当前mysql中的数据库列表
mysql> show databases;
- 显示指定命令的数据库创建时的SQL指令
mysql> show create database test1_db;
- 查看所有的数据表
mysql> show tables;
- 查看数据表结构
mysql> desc students;
注:关于mysql的其他指令操作也可以查看拓展专栏中的mysql数据库入门到精通-Windows版本mysql安装