一、数据库概述
1、数据库介绍
(1)数据库模型
- 层次模型
所有的数据是有一个层次结构的,数据与数据之间是通过父子的层次关系进行链接的。 - 网状模型
比层次模型更为复杂,而且每一个数据之间会存在多个关系。 - 关系对象模型
- 关系模型数据库
将世界看成实体与实体之间的联系,以二维表的形式存储数据,只要是使用的关系型数据库,那么一定遵循的是关系模型。
(2)分类
常见关系型数据库
- MySQL
- oracle
- access
- sqlite
- DB2
- sql server
按大小分类
- 小型:access,sqlite
- 中型:MySQL,sql server
- 大型:oracle,DB2
2、MySQL 基本命令提示符
mysqld -install
:安装免安装版数据库(从bin目录下以管理员方式运行cmd进入命令行);net start mysql
:开启数据库的服务,另外关闭服务命令是net stop mysql;mysql -h主机地址 -P端口号 -u用户名 -p用户密码
,如:mysql -h127.0.0.1 -P3306 -uroot - padmin
使用客户端进入MySQL连接(-h远程管理),端口号默认3306。如果是连接本机,且默认端口时,可以直接使用mysql -u root-p 登录到MySQL数据库;mysqladmin -uroot -p12345 passworld "admin"
:修改root用户的密码从12345为admin;use mysql
:切换到MySQL核心数据库;select Host,User,Password from user
:查询MySQL数据库中的user表的三列数据;exit
:退出操作。
3、MySQL与SQL
(1)MySQL: DataBase Manager System
MySQL是关系型数据库管理系统(DBMS),一共分为四层:
- 第一层:数据库管理系统
- 第二层:库结构
- 第三层:表结构(二维表)
- 第四层:字段结构
(2)SQL
SQL是结构化查询(编程)语言,是制定数据库语言的标准,一共分为五类
- DQL:数据查询语言 Data Query Language
包括简单查询、条件查询、子查询、连接查询、联合查询。
关键字:
select
from
where
group by
having
order by
distinct
limit
jion on
- DDL:数据定义语言 Data Definition Language
用于创建库、删除库、设置编码和校验,创建表、删除表、修改表、显示表、显示库。 - DML:数据操作语言 Data Manipulation Language
包括新增数据,修改数据,删除数据。
关键字:
insert into
update
delete
- DCL:数据控制语言 Data Control Language
用于权限的控制。
关键字:
grant
revoke
- TPL:数据事务管理语言 Transaction Processing Language
用于事务的操作。
关键字:
transaction
commit
rollback
savepoint
二、数据库的数据类型
1、整形
tinyint 迷你整形 1个字节 数据范围 -128—137
smallint 小整形 2个字节
mediumint 中整形
int 整形
bigint 大整形
2、小数(浮点数)
float 单精度浮点数 7位小数
double 双精度浮点数 15位小数
decimal(M,D) 大浮点数 30位小数,M是总位数,D是小数的位数,D必须小于M,decimal误差最小
3、字符串
扫描二维码关注公众号,回复:
9348657 查看本文章
char 定长字符型(定长255)
varchar(长度) 可变字符型(边长0—65535)
tinytext 文本型
text 文本型(无默认值)
binary 0—M变长字符串
varbinary 0—M边长字符串
char和varchar区别:
- char 定长,只要在255范围以内,不管存多少个数据,都分配255个内存空间,会造成空间浪费;varchar是变长的,在65535以内,系统会根据存入的数据所需内存大小分配,节约空间。
- char 在存入数据的时候只要在255以内,就直接存储,效率较快;varchar在存储的时候会运行两次,第一次获取长度,第二层才存入数据,效率较慢。
4、二进制
tinyblob 二进制大对象
blob 二进制大对象
mediumblob 二进制大对象
longblob 二进制大对象
5、日期和时间
year 格式YYYY 记录年份
date 格式YYYY-MM-DD 记录当前年月日
time 格式HH-MM-SS 记录当前时间
timestamp 格式YYYY-MM-DD HH:MM:SS 记录日期+时间
datetime 格式YYYY-MM-DD HH:MM:SS 记录日期+时间,按照计算机元年开始,误差小一点
特别的: MySQL中无布尔值,可以使用tinyint(1)构造。
三、数据库的七大约束
1、 检查约束
- 以数据类型以及数据的长度进行约束,在一个表中, 所插入的数据,必须和数据类型匹配,并且范围不能超过指定的长度。
2、非空约束 not null
- 非空约束用于确保当前列的值不为空值,非空约束只能出现在表对象的列上。
- 如果有非空约束,那么在插入插入数据时,必须插入一条数据,非空约束一般用于收集并存储的字段数据。
- 所有的类型的值都可以是null,包括int、float 等数据类型。
3、默认值约束 default
- 创建列时可以指定默认值,当插入数据时如果未主动设置数据,则自动添加该默认值。
4、主键约束 primary key
- 确保每一行唯一,主键约束相当于唯一约束 + 非空约束的组合,是用于唯一识别一个实体的字段,不允许有空值,当创建主键的约束时,系统默认会在所在的列和列组合上建立对应的唯一索引。
- 如果主键使用单个列,则它的值必须唯一,如果是多列,则其组合必须唯一。
5、唯一约束 unique
- 保证每一行的数据是唯一的,没有重复的数据,保证数据的唯一性。
- 唯一约束不允许出现重复的值,但是可以为多个null。
- 同一个表可以有多个唯一约束,多个列组合的约束。
- 在创建唯一约束时,如果不给唯一约束名称,就默认和列名相同。
- 唯一约束不仅可以在一个表内创建,而且可以同时多表创建组合唯一约束。
6、外键约束 foreign key
- 用于表与表之间的关联,一张表中的外键一般都是另一张表中的主键, 并且加上外键约束之后,插入的数据就必须是该主键存在的值。
7、自增长约束
- 如果为某列设置自增列,插入数据时无需设置此列,默认将自增(一个表只能有一个自增列)。
8、自定义约束
- 自定义约束是使用存储过程或者触发器来进行约束。
四、数据库的范式
1、确保每列保持原子性(不可拆分性)
- 确保一列只存放一个数据,即数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项。
- 如果实体中的某个属性有多个值时,必须拆分为不同的属性。
2、确保每一行的唯一性
- 满足第一范式的基础上,确保每一行数据的唯一,能够唯一区分一个实体,实现的方式可以是主键。
3、确保每列都和主键列直接相关,而不是间接相关
- 第三范式需要确保数据表除外键外,其他非主键属性不得重复出现在第二张表上。
五、表与表之间的关系
1、一对一
- 从实体看,一张表中的一个实体,唯一对应另一张表中的一个实体。
2、一对多
- 从实体看,一张表中的一个实体,对应另一张表中的多个实体。如一个课程可以被多个学生选择。
3、 多对多
- 一张表中的一个实体,对应另一张表中的多个实体,反过来,另一张表中的一个实体对应这张表中的多个实体。如果是多对多的关系,最好生成第三张表作为中间表用于关联。
六、E-R图
1、概念
- 用于表示实体的属性,以及实体与实体之间的关系图
2、画法
(1)矩形:表示实体,在框中记入实体名。
(2)椭圆:表示实体所具备的属性(字段),将属性名记入框中。对于主属性名,则在其名称下划一下划线。
(3)菱形:表示实体与实体联系,在框中记入联系名.
(4)连线:实体与属性之间、实体与联系之间、联系与属性之间用直线相连,并在直线上标注联系的类型。
- 对于一对一联系,要在两个实体连线方向各写1;
- 对于一对多联系,要在一的一方写1,多的一方写N;
- 对于多对多关系,则要在两个实体连线方向各写N,M。