1、什么是数据库
或许我们会想,存储数据用文件不就行了,为什么还要数据库?
其实,文件保存数据也不是任何情况下都适用的
(1)首先文件的安全性就存疑
(2)而且文件仅仅是保存数据,实在是不利于数据的查询,更不要说整理了
(3)还有就是文件不利于存储海量数据
综上,文件还是有一些缺陷的,所以为了解决上述问题,就设计出了更加利于管理数据的东西,这就是数据库
2、主流数据库
SQL Sever:微软的产品,主要适用于中大型项目
Qracle:甲骨文产品,适合大型项目,并发一般来说不如MySQL
MySQL:当今世界上最受欢迎的开源数据库,属于甲骨文,并发性好,但是不适合做复杂的业务
PostgreSQL:加州伯克利大学分校计算机系开发的关系型数据库,可以免费使用
SQLite:一款轻量级的数据库,占用资源非常低,比较适合嵌入式产品
H2:一个用Java开发的数据库,本身是个类库,可以直接嵌入到应用项目中
3、连接数据库
回归正题,讲讲MySQL的使用
首先是连接数据库
输入
sql
mysql -u root -p
然后输入你当初设置的密码,就可以成功连接,关于数据库的下载与安装会在另一篇文章中提到
4、服务器,数据库,表关系
所谓的安装数据库服务器,只是在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多个数据库,一般的开发人员只会针对每一个应用创建一个数据库。
为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据。
数据库服务器数据库和表的关系如下图:

所以其实当我们在数据库客户端中输入创建库的指令后,服务器就会收到这个指令,然后在相关目录下帮我们创建数据库,创建表也是如此,表面上看来是用户创建了库,但其实是数据库服务器帮我们在磁盘上创建的,创建出的库其实是一个目录,创建的表则是一个二进制文件
eg:
这是一个在LInux系统下的MySQL数据库存储文件的地方

现在进入数据库,然后在数据库中创建一个库
当然,创建库的指令是
sql
create database 库名;
查看数据库的指令
sql
show databases;
在提一嘴:这里的指令写成大写和小写都是可以的,建议统一风格,要不然看起来不美观
框住的就是现在已经有的数据库分号不能少,原谅我上面两个语句都忘写分号了
然后再来看看右边有没有新增目录

可以看到,确实 新增了一个目录,那么试试创建一个表呢?
创建表的指令是
sql
create table 表名(
(表内的各种表头) 名字 类型,
(表内的各种表头) 名字 类型,
(表内的各种表头) 名字 类型,
(表内的各种表头) 名字 类型
);
哦对了,创建表之前还有一件事,就是指定数据库,不然那么多数据库,我们到底要给哪个库创建表呢
使用库的语句
sql
use 库名;
这样就是给Hello库里创建了一个student表,至于所谓的类型,后面会说

然后我们看看,Hello里究竟会不会新增什么文件

还真有,两个student文件,至于其他的就不深究了。
5、其他指令
上面我们也就大概了解了MySQL数据库究竟是怎么个事
现在继续看看其他指令
接着是插入指令
sql
insert into (表头,表头,表头) values (参数,参数,参数);
这个只是插入的一种指令
现在我们给刚刚的数据库插入几条数据

然后查询一下表中插入的数据
sql
select * from 表名;

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

对于一个MysQL服务来讲,它主要的功能有三层
1、连接池:在连接建立的过程中,帮助我们做链接管理和鉴别用户的合法身份
2、中间这一层主要是对客户端下达的SQL指令,进行语法分析,甚至可能会对语句进行一定的优化 ,然后再根据MySQL协议将语句下发给下一层
3、第三层则是一个个具体的存储引擎,收到上面传过来的语句后再将这语句进行解释,再去访问指定的文件或者指定的表结构,对数据进行增删查改,说白了他们就是执行这个语句的模块
但是为什么会有这么多引擎呢?
其实是因为数据也有不同的类型,有的是文档型的有的是二进制类型的,或者其他别的类型。针对这些不同的数据,数据库也会采用不同的方案,效率也会有所差别,所以MySQL就提供了各种各样的引擎,比如第一个引擎就适合存储大文件,第二个引擎就有丰富的索引,适合进行查找,在使用时会具体问题具体分析
而且这些存储引擎是插件式的,能即插即用。
7、SQL分类
DDL【data definition language】 数据定义语言,用来维护存储数据的结构
代表指令: create, drop, alter
DML【data manipulation language】 数据操纵语言,用来对数据进行操作
代表指令: insert,delete,update
DML中又单独分了一个DQL,数据查询语言,代表指令: select
DCL【Data Control Language】 数据控制语言,主要负责权限管理和事务
代表指令: grant,revoke,commit
8、存储引擎
存储引擎是:数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术
的实现方法。
MySQL的核心就是插件式存储引擎,支持多种存储引擎。
查看存储引擎
sql
show engines;
这是部分存储引擎的对比