数据库的分类
数据库大体可以分为 关系型数据库 和 非关系型数据库
- 关系型数据库(RDBMS):
是指采用了关系模型来组织数据的数据库。 简单来说,关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。
基于标准的SQL,只是内部一些实现有区别。常用的关系型数据库如:
- Oracle:甲骨文产品,适合大型项目,适用于做复杂的业务逻辑,如ERP、OA等企业信息系统。收费。
- MySQL:属于甲骨文,不适合做复杂的业务。开源免费。
- SQL Server:微软的产品,安装部署在windows server上,适用于中大型项目。收费。
- 非关系型数据库:
不规定基于SQL实现。现在更多是指NoSQL数据库,如:
- 基于键值对(Key-Value):如 memcached、redis
- 基于文档型:如 mongodb
- 基于列族:如 hbase
- 基于图型:如 neo4j
关系型数据库与非关系型数据库的 区别
关系型数据库 | 非关系型数据库 | |
---|---|---|
使用SQL | 是 | 不强制要求,一般不基于SQL实现 |
事务支持 | 支持 | 不支持 |
复杂操作 | 支持 | 不支持 |
海量读写操作 | 效率低 | 效率高 |
基本结构 | 基于表和列,结构固定 | 灵活性比较高 |
使用场景 | 业务方面的OLTP系统 | 用于数据的缓存、或基于统计分析的OLAP系统 |
OLTP(On-Line Transaction Processing)是指联机事务处理。
OLAP(On-Line AnalyticalProcessing)是指联机分析处理。
数据库的操作
1、显示当前数据库
SHOW DATABASES;
2、创建数据库
CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [,
create_specification] ...]
create_specification:
[DEFAULT] CHARACTER SET charset_name
[DEFAULT] COLLATE collation_name
- 大写的表示关键字
- [] 是可选项
- CHARACTER SET: 指定数据库采用的字符集
- COLLATE: 指定数据库字符集的校验规则
示例一:创建名为 db_test1 的数据库
CREATE DATABASE db_test1;
当我们创建数据库没有指定字符集和校验规则时,系统使用默认字符集:utf8,校验规则是:utf8_ general_ ci
示例二:如果系统没有 db_test 的数据库,则创建一个使用utf8mb4字符集的 db_test2 数据库,如果有则不创建
CREATE DATABASE IF NOT EXISTS db_test2 CHARACTER SET utf8mb4;
3、使用数据库
use 数据库名;
4、删除数据库
DROP DATABASE [IF EXISTS] db_name;
数据库删除以后,内部看不到对应的数据库,里边的表和数据全部被删除
示例
drop database if exists db_test1;
drop database if exists db_test2
常用数据类型
数值类型
数据类型 | 大小 | 说明 | 对应java类型 |
---|---|---|---|
BIT[ (M) ] | M指定位数,默认为1 | 二进制数,M范围从1到64,存储数值范围从0到2^M-1 | 常用Boolean对应BIT,此时默认是1位,即只能存0和1 |
TINYINT | 1字节 | Byte | |
SMALLINT | 2字节 | Short | |
INT | 4字节 | Integer | |
BIGINT | 8字节 | Long | |
FLOAT(M, D) | 4字节 | 单精度,M指定长度,D指定小数位数。会发生精度丢失 | Float |
DOUBLE(M,D) | 8字节 | Double | |
DECIMAL(M,D) | M/D最大值+2 | 双精度,M指定长度,D表示小数点位数。精确数值 | BigDecimal |
NUMERIC(M,D) | M/D最大值+2 | 和DECIMAL一样 | BigDecimal |
- 数值类型可以指定为无符号(unsigned),表示不取负数。
- 1字节(bytes)= 8bit。
对于整型类型的范围:
- 有符号范围:-2^(类型字节数8-1) 到2^(类型字节数8-1)-1, 如int是4字节,就是-2^31 到2^31-1
- 无符号范围:0到2^(类型字节数*8) -1, 如int就是2^32-1
尽量不使用unsigned,对于int类型可能存放不下的数据,int unsigned同样可能存放不下,与其如此,还不如设计时,将int类型提升为bigint类型。
字符串类型
数据类型 | 大小 | 说明 | 对应java类型 |
---|---|---|---|
VARCHAR (SIZE) | 0-65,535字节 | 可变长度字符串 | String |
TEXT | 0-65,535字节 | 长文本数据 | String |
MEDIUMTEXT | 0-16 777 215字节 | 中等长度文本数据 | String |
BLOB | 0-65,535字节 | 二进制形式的长文本数据 | byte[] |
日期类型
数据类型 | 大小 | 说明 | 对应java类型 |
---|---|---|---|
DATETIME | 8字节 | 范围从1000到9999年,不会进行时区的检索及转换。 | java.util.Date、java.sql.Timestamp |
TIMESTAMP | 4字节 | 范围从1970到2038年,自动检索当前时区并进行转换 | java.util.Date、java.sql.Timestamp |