文章目录
基础概念
数据库(DataBase,简称DB),用于存储和管理大量数据的仓库。
数据库特点
- 持久化存储数据的。其实数据库就是一个文件系统
- 方便存储和管理数据
- 使用了统一的方式操作数据库-- SQL
数据库有哪些
MYSQL
: 开源免费的数据库,小型的数据库。已经被 Oracle 收购了,MySQL6.x 版本也开始收费。Oracle
: 收费的大型数据库,Oracle 公司的产品。Oracle 收购SUN 公司,收购 MYSQL。DB2
: IBM 公司的数据库产品,收费的。常应用在银行系统中SQLServer
: MicroSoft 公司收费的中型的数据库。C#
、.net
等语言常使用。SyBase
:已经淡出历史舞台。提供了一个非常专业数据建模的工具 PowerDesignerSQLite
: 嵌人式的小型数据库,应用在手机端。
常用数据库: MYSQL
,Oracle
数据库在网站系统中的作用
- 前端页面:展示内容和数据给用户看
- 后台:处理前端发过来的请求,去数据库中查询数据,经过逻辑处理之后响应给前端
- 数据库:存储和管理数据
数据库类型
- 关系型数据库:行与列存储,类似excel表,如MySQL,Oracle,Sql Server,DB2, SQLite
- 非关系型数据库:key:value方式存储,如Redis、MongoDB
MYSQL介绍
数据库可视化工具
可以使用命令来操作Mysql,但是对于新手来说,直接使用可视化工具来操作Mysql更加方便,下面是两款工具
- SQLyog
- Navicat
Mysql数据库引擎
MYISAM(早期使用) | INNODB(默认使用) | |
---|---|---|
事务支持 | 不支持 | 支持 |
数据行锁定 | 不支持 | 支持 |
外键约束 | 不支持 | 支持 |
全文索引 | 支持 | 不支持 |
表空间的大小 | 较小 | 较大,约为2倍 |
使用的区别
MYISAM
节约空间,速度较快INNODB
安全性高,事务的处理,多表多用户操作
在物理空间存在的位置区别
InnoDB
在数据库表中只有一个*.frm
文件,以及上级目录下的 ibdata1 文件MYISAM
对应文件:*.frm
表结构的定义文件;*.MYD
数据文件 (data);*.MYI
索引文件 (index)
数据表 列的数据类型
数值类型
一个字节通常等于8个二进制位,即2^8=256
类型 | 说明 | 字节数 | 备注 |
---|---|---|---|
tinyint | 十分小的数据 | 1 | 取值范围 -128 到 127 |
smallint | 较小的数据 | 2 | 取值范围 -32768 到 32767 |
mediumint | 中等大小的数据 | 3 | 取值范围 -8388608 到 8388607 |
int | 标准的整数 | 4 | 常用的整数类型,取值范围 -2147483648 到 2147483647 |
bigint | 较大的数据 | 8 | 取值范围 -9223372036854775808 到 9223372036854775807 |
float | 浮点数 | 4个字节 | 大约能表示6到7位十进制数 |
double | 浮点数 | 8个字节 | 大约能表示15位十进制数 |
decimal | 字符串形式的浮点数 | 适合用于货币或其他需要精确计算的场合 |
float和double是浮点数类型,在表示和存储浮点数时有如下区别:
-
存储空间:float占用4个字节,而double占用8个字节。因此,double具有更高的精度和范围。
-
精度:float是单精度浮点数,通常能表示6到7位十进制数。而double是双精度浮点数,占用8个字节,能够提供更高的精度,通常被认为是更准确的浮点数表示方式。
-
性能:由于float存储更少的数据,所以相对于double来说,运算速度会稍快一些。但是,现代计算机通常能够高效地处理双精度浮点数,差异可能并不明显。
因此,在选择float和double时,需要根据具体的使用情况和所需的精度进行权衡。如果精度要求不高,且存储空间和性能更重要,可以选择float。而如果需要更高的精度,可以选择double。
字符串类型
类型 | 说明 | 字节数 | 备注 |
---|---|---|---|
char | 字符串固定大小的 | 0~255 | |
varchar | 可变字符串 | 0~65535 | 常用的变量,类似String |
tinytext | 微型文本 | 2^8 -1 | |
text | 文本串 | 2^16 -1 | 保存大文本 |
时间日期类型
类型 | 说明 | 备注 |
---|---|---|
date | YYYY-MM-DD 日期格式 | |
time | HH:mm:ss 时间格式 | |
datetime | YYYY-MM-DD HH:mm:ss | 最常用的时间格式 |
timestamp | 时间戳,1970.1.1到现在的毫秒数 | 也较为常用 |
year | 年份表示 |
二进制类型
用来存储二进制文件,如图片、音乐
类型 | 字节数 |
---|---|
TinyBlob | 最大255 |
Blob | 最大65K |
MediumBlob | 最大16M |
LongBlob | 最大4G |
null
没有值,未知
数据表 列的属性
Unsigned
- 无符号的整数
- 声明了该列的值不能为负数
zerofill
- 0填充的
- 不足的位数,使用0来填充。如int(3),
8
被补充为008
自增
- 通常理解为自增,自动在上一条记录的基础上 + 1
- 通常用来设计主键时使用,必须是整数类型
- 可以自定义设计主键自增的起始值和步长
非空
- 假设设置为
not null
,如果不给它赋值,就会报错 - 假设设置为
null
,如果不填写值,默认就是null
默认
- 给字段设置默认值
- 如gender,设置默认值为0,如果在插入数据的时候,不填写gender的值,默认填写为0
数据表设计 表的常用字段
id
主键version
使用乐观锁时使用is_deleted
逻辑删除create_time
创建时间update_time
修改时间