作为程序员,我们在项目中会使用到许多种类的数据库,根据业务类型、并发量和数据要求等选择不同类型的数据库,比如MySQL、Oracle、SQLServer、SQLite、MongoDB和Redis等。今天我们就来系统的介绍一下这其中的关系型数据库MySQL,这也是在很多开源系统中使用比较多的,因为其体积小、速度快、并且开源等的特征吸引很多开发人员的青睐。不管是自用还是商用,一些业务不太复杂的系统使用MySQL都是一个不错的选择。
接下来我们主要通过编写SQL语句的方式来讲解SQL的一些知识点,首先我们创建两张表,用户表(user)和岗位表(post),设计几个简单的字段,后续的SQL语句都是基于这两张表。以下是这两张表的结构。
1、基础概念
我们先来了解一些MySQL中常涉及的一些基础概念。
1.1、MySQL存储引擎
1.1.1、什么是存储引擎
MySQL中的数据是用各种不同的技术存储在文件中,每一种技术都使用不同的存储机制、索引技巧、锁定水平并最终提供不同的功能和能力,这些不同的技术以及配套的功能在MySQL中称为存储引擎。存储引擎是MySQL将数据存储在文件系统中的存储方式或者存储格式。
1.1.2、MySQL有哪些存储引擎
MySQL的存储引擎包括:InnoDB、MyISAM、BDB、MEMORY、MERGE、EXAMPLE、NDBCluster、ARCHIVE、CSV、BLACKHOLE和FEDERATED等。其中MylSAM和lnnoDB是比较常用的两种。
MyISAM的主要特点是拥有较高的插入,查询速度,但不支持事务,支持表锁(即使操作一条记录也会锁住整个表,不适合高并发的操作);而InnoDB引擎提供对数据库事务的支持,并且还提供了行级锁和外键的约束(操作时只锁某一行,不对其它行有影响,适合高并发的操作),InnoDB也是MySQL5.5版本后默认数据库存储引擎。
我们用一张图来对比一下两者的区别。
1.1.3、怎么查询当前数据的存储引擎
可以使用数据库管理工具客户端查看(表类型会显示),也可以使用查询语句进行查询。使用showengines查询当前数据库支持的存储引擎,使用showvariableslike%storage_engine%查询l数据库默认的存储引擎。前面也说到了,MySQL5.5之前的默认存储引擎是MyISAM,MySQL5.5版本后默认数据库存储引擎改为了InnoDB
1.2、MySQL事务
1.2.1、什么是事务?
事务就是一组独立不可分割的工作单元,事务中的操作要么全部执行成功,要么全部执行失败,没有其他的中间状态。具体地说,就是在一个事务中执行多个操作时,要么所有的事务都被提交(