一、什么是数据库
1.文件保存数据的缺点
文件的安全性问题
文件不利于查询和对数据的管理
文件不利于存放海量数据
文件在程序中控制不方便
2.数据库的概念
数据库:高效地存储和处理数据的介质(介质主要是两种:磁盘和内存)磁盘:机械硬盘、固态硬盘和U盘。
数据库是衡量一个程序员水平的重要指标。
3.主流数据库
SQL Server:微软的产品,.Net程序员的最爱,适合中大型项目。
Oracle:甲骨文产品,适合大型项目,复杂的业务逻辑,并发性不如MySQL.
MySQL:世界上最受欢迎的数据库,属于甲骨文,并发性好,不适合做复杂的业务。只要在电商,SNS,论坛。对简单的SQL处理较好。
PostgreSQL:关系型数据库,可以免费使用,修改和并发。
SQLite:是一款轻型的数据库,遵守ACID的关系型数据库管理系统,它包含在一个相对较小的C库中。它的设计目标是嵌入式的,占用资源非常低,在嵌入式设备中,可能只需要几百K的内存。
H2:用Java开发的嵌入式数据库,它本身是一个类库,可以直接嵌入到应用程序中。
4.基本使用
连接服务器:
mysql -h 127.0.0.1 -P 3306 -u root -p
注意:
1)如果没有写-h 127.0.0.1,默认是连接本地。
2)如果没有写-P 3306,默认是连接3306端口号。
创建数据库 create database hello;
使用数据库 use hello;
创建数据库表 create table student(id int,name varchar(32),gender varchar(2));
表中插入数据 insert into student (id,name,gender) values (1,'张三','男');
查询表中的数据 select * from student;
5.服务器、数据库和表的关系
所谓安装数据库服务器,只是在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。为保存数据库中的数据,一般会在数据库中创建多张表,以保存程序中实体的数据。
6.MySQL架构
MySQL是一个可移植的数据库,几乎在当前所有的操作系统上运行,MySQL基本上能保证在各个平台上的物理体系结构的一致性。
可插拔式的存储引擎是MySQL的优点。MyISAM不支持事务,支持全文索引。
7.SQL的分类
DDL:数据定义语言,用来维护存储数据的结构。eg:create、drop、alter
DML:数据操纵语言,用来对数据进行操作。eg:insert、delete、update
DQL:数据查询语言,eg:select
DCL:数据控制语言,主要负责权限管理和事务。eg:grant、revoke、commit
8.存储引擎
定义:数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。
MySQL的核心就是插件式存储引擎,支持多种存储引擎。
查看存储引擎:
show engines;
show engines\G;//查询结果垂直显示
9.存储引擎对比
特点 | MyISAM | BOB | Memory | InnoDB | Archive | NDB |
存储限制 | 无 | 无 | 无 | 64TB | 无 | Yes |
事务安全(提交、回滚等) | 支持 | 支持 | ||||
锁机制 | 表锁 | 页锁 | 表锁 | 行锁 | 行锁 | 行锁 |
事务完整性/快照读取 | 支持 | 支持 | 支持 | |||
地理空间支持 | 支持 | |||||
B树索引 | 支持 | 支持 | 支持 | 支持 | 支持 | |
哈希索引 | 支持 | 支持 | 支持 | |||
全文索引 | 支持 | |||||
集群索引 | 支持 | |||||
数据缓存 | 支持 | 支持 | ||||
索引缓存 | 支持 | 支持 | 支持 | 支持 | ||
压缩数据 | 支持 | 支持 | ||||
加密数据 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
存储开销 | 低 | 低 | N/A | 高 | 非常低 | 低 |
内存占据量 | 低 | 低 | 中等 | 高 | 低 | 高 |
批量插入速度 | 高 | 高 | 高 | 低 | 非常高 | 高 |
集群数据库支持 | 支持 | |||||
复制支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
外键支持 | 支持 | |||||
实时恢复 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
查询缓存支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
数据字典的更新统计 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
MyISAM与InnoDB的区别:
1)存储限制:MyISAM没有限制,而InnoDB支持64TB的存储。
2)索引:InnoDB支持哈希索引,而MyISAM不支持;MyISAM支持全文索引,而InnoDB不支持。
3)外键:MyISAM不支持外键,而InnoDB支持外键。
4)事务安全:MyISAM不支持事务,而InnoDB支持事务。
5)锁机制:MyISAM是表锁,而InnoDB是行锁。
6)查询和添加速度:MyISAM批量插入速度快。
7)内存空间使用率:MyISAM的内存空间使用率比InnoDB低。
MyISAM与InnoDB的应用场景:
如果表对事务要求不高,同时是以添加和查询为主的,考虑使用MyISAM存储。如:发帖表、回复表。
如果对事务要求高,保存的是重要数据,建议使用InnoDB,如:订单表,账号表。