MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
mysql是关系数据库,它将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
MySQL作为一个数据存储系统,核心功能为存储数据和读取数据。
在数据存储方面,MySQL是基于文件系统或者说是磁盘来进行数据保存的,即数据都是保存为磁盘上的一个个文件;
在数据读取方面,MySQL作为一个关系型数据库,在应用代码中使用SQL语句来定义需要查找获取的数据,然后通过MySQL服务器执行该SQL从磁盘文件中读取对应的数据返回给应用。
MySQL作为一个后台数据存储软件,也是采用C/S架构,基于TCP/IP进行通信的,所以应用代码需要进行数据存储时,需要通过MySQL客户端首先与MySQL服务端建立连接,然后才能进行后续的存取操作。
MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。
特点:
1. mySQL使用 C和 C++编写,并使用了多种编译器进行测试,
2. 保证了源代码的可移植性。
2.支持 AIX、FreeBSD、HP-UX、Linux、Mac OS、NovellNetware、OpenBSD、OS/2 Wrap、Solaris、Windows等多种操作系统。
3.为多种编程语言提供了 API。这些编程语言包括 C、C++、Python、Java、Perl、PHP、Eiffel、Ruby,.NET和 Tcl 等。
4.支持多线程,充分利用 CPU 资源。
5.优化的 SQL查询算法,有效地提高查询速度。
6.既能够作为一个单独的应用程序应用在客户端服务器网络环境中,
也能够作为一个库而嵌入到其他的软件中。
7.提供多语言支持,常见的编码如中文的 GB 2312、BIG5,
日文的 Shift_JIS等都可以用作数据表名和数据列名。
8.提供 TCP/IP、ODBC 和 JDBC等多种数据库连接途径。
9.提供用于管理、检查、优化数据库操作的管理工具。
10.支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
11.支持多种存储引擎。
Linux作为操作系统,Apache 或Nginx作为 Web 服务器,MySQL 作为数据库,PHP/Perl/Python作为服务器端脚本解释器。由于这四个软件都是免费或开放源码软件(FLOSS),因此使用这种方式不用花一分钱(除开人工成本)就可以建立起一个稳定、免费的网站系统,被业界称为“LAMP“或“LNMP”组合。
在MySQL的整体架构设计当中,主要包括连接层,SQL解析层,数据存储层或者说是存储引擎层。
1.连接层负责与应用代码建立数据通信的连接,在这里包括了身份认(授权认证)
和TCP连接建立,处理线程分配;(并不是mysql独有的,大多数基于网络的
客户端服务器的工具或者服务都有类似的架构)
2.SQL层主要处理连接层接收到的数据操作相关请求,
解析对应SQL语句,明白应用代码需要对什么数据进行何种操作,
以及检查当前用户是否有权限对指定数据库和数据表进行访问和操作;
(这一层为mysql的核心服务部分,大多数mysql核心的功能都在这一层
包括分析优化、查询缓存、所有的内置函数、所有跨存储引擎的功能都在这一层实现,
比如,存储过程,触发器,视图等。
3.存储引擎层主要是被SQL层用来访问磁盘上的数据文件,
对数据文件进行数据读写操作,即对于数据存储则从SQL层获取数据然后保存
到对应的数据文件中,对应数据读取则加载读取对应的数据文件,
然后将给定的数据返回给SQL层。
(1)MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。
(2)存储引擎说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方
法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型)
MySQL默认配置了许多不同的存储引擎,可以预先设置或者在MySQL服务器中启用。你可以选择适用于服务器、数据库和表格的存储引擎,以便在选择如何存储你的信息、如何检索这些信息以及你需要你的数据结合什么性能和功能的时候为你提供最大的灵活性。
选择如何存储和检索你的数据的这种灵活性是MySQL为什么如此受欢迎的主要原因。其它数据库系统(包括大多数商业选择)仅支持一种类型的数据存储。遗憾的是,其它类型的数据库解决方案采取的“一个尺码满足一切需求”的方式意味着你要么就牺牲一些性能,要么你就用几个小时甚至几天的时间详细调整你的数据库。使用MySQL,我们仅需要修改我们使用的存储引擎就可以了
几种不同的存储引擎:
MyISAM: 拥有较高的插入,查询速度,但不支持事务
InnoDB :5.5版本后Mysql的默认数据库,事务型数据库的首选引擎,支持ACID事务,支持行级锁定
BDB: 源自Berkeley DB,事务型数据库的另一种选择,支持COMMIT和ROLLBACK等其他事务特性
并发控制指的是当多个用户同时更新运行时,用于保护数据库完整性的各种技术。并发机制不正确可能导致脏读、幻读和不可重复读等此类问题。并发控制的目的是保证一个用户的工作不会对另一个用户的工作产生不合理的影响。
举例:
现有两处火车票售票点,同时读取某一趟列车车票数据库中车票余额为X。两处售票点同时卖出一张车票,同时修改余额为X -1写回数据库,这样就造成了实际卖出两张火车票而数据库中的却记录只少了一张。
产生这种情况的原因是因为两个事务读入同一数据并同时修改,其中一个事务提交的结果破坏了另一个事务提交的结果,导致其数据的修改被丢失,破坏了事务的隔离性。并发控制要解决的就是这类问题。
并发控制的基本单位是事务。
主要考虑服务器层和存储引擎层的并发控制。
1.共享锁(读锁)和排他锁(写锁)
(1)共享锁(S锁):共享 (S) 用于不更改或不更新数据的操作(只读操作),如 SELECT 语句。
如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能加排他锁。获准共享锁的事务只能读数据,不能修改数据。
(2)排他锁(X锁):用于数据修改操作,例如 INSERT、UPDATE 或 DELETE。确保不会同时同一资源进行多重更新。
如果事务T对数据A加上排他锁后,则其他事务不能再对A加任任何类型的封锁。获准排他锁的事务既能读数据,又能修改数据。
事务是一系列作为一个逻辑单元来执行的操作集合.。
这些操作要么全部执行,要么全部不执行
银行转账为例,A账户转给B账户10元,数据库操作需要两步,第一步A账户减10元,第二步B账户加10元,如果没有事务并且在两步中间发生异常,就会导致A的账户少了10元,但B的账户没有变化,如果不能保证这两步操作统一(全部准确执行),银行的转账业务也没法进行展开了。
(如果从A账户减少10元后系统出故障了或者出现了其他意外造成B账户没有增加10元这种情况称为事务不一致,因为一个事务没有做完,所以数据库会将整个过程回滚,你可以理解为就当什么事也没发生过,这种回滚机制就是事务的一种特征,目的就是为了保持数据库的数据库的事务一致性。)
1、原子性(Atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
2、一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。(在银行的例子中,在执行一个人减钱另一个人加钱的操作,即使系统崩溃,也不会白白损失钱。因为事务最终没有提交,所以修改不会保存在数据库中)
3、隔离性(isolation一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
4、持久性(durability指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
(持久性分为不同的级别)
1.结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
2.SQL能做什么?
对数据进行增删改查。
3.SQL语句对大小写不敏感(不区分大小写)
需要有镜像资源以及安装包
1)下载mysql的rpm包
tarxfmysql-5.7.24-1.el7.x86_64.rpm-bundle.tar
2)安装需要的包
yum install -y mysql-community-client-5.7.24-1.el7.x86_64.rpm mysql-community-common-5.7.24-1.el7.x86_64.rpm
mysql-community-libs-5.7.24-1.el7.x86_64.rpm
mysql-community-libs-compat-5.7.24-1.el7.x86_64.rpm
mysql-community-server-5.7.24-1.el7.x86_64.rpm
#安装后会替换mariadb相关的库文件
1.安装完毕后,开启mysql
2.3.4.必须重置mysql的密码才可以对mysql进行操作
5.执行mysql_secure_installation进行密码设置
密码必须大于8位 并且大小写+特殊符号
设置完密码一路回车