关系型数据库: MySQL/Oracle/SQL Serve
关系型数据库通常会创建很多个二位数据表,数据表之间相互关联起来,形成一对一、一对多、多对多等关系,之后可以利用SQL语句在多张表中查询我们所需的数据,支持事务,对数据的访问更加的安全
非关系型数据库: MongoDB/Redis
非关系型数据库比较自由,存储数据甚至可以直接将一个复杂的json对象直接塞入到数据库中,NoSQL是基于key-value的对应关系,并且查询的过程中不需要经过SQL解析,性能更高
比较常用到的非关系型数据库,在爬取大量的数据进行存储时,会比较常见
SQL语句的四种分类
DDL(Data Definition Language): 数据定义语言;
可以通过DDL语句对数据库或表进行:创建、删除、修改等操作
DML(Data Manipulation Language): 数据操作语言;
可以通过DML语句对表进行:添加、删除、修改等操作;
DQL(Data Query Language): 数据查询语言;
可以通过DQL从数据库中查询语言;
DCL(Data Control Language): 数据控制语言
对数据库、表格的权限进行相关访问控制操作
SQL的数据类型
MySQL支持的数据类型有:数字类型,日期和时间类型,字符串(字符和字节)类型,空间类型和JSON数据类型。
数字类型
MySQL的数字类型有很多;
整数数字类型:INTEGER,INT,SMALLINT,TINYINT,MEDIUMINT,BIGINT;
浮点数字类型:FLOAT,DOUBLE (FLOAT是4个字节,DOUBLE是8个字节)
精确数字类型:DECIMAL,NUMERIC(DECIMAL是NUMERIC的实现方式)
MySQL的日期类型有很多:
YEAR以YYYY格式显示值:(范围1901到2155,和0000)
DATE类型用于具有日期部分但没有时间部分的值:(DATE以格式YYYY-MM-DD显示值,支持的范围是 "1000-01-01"到"9999-12-31")
DATETIME类型用于包含日期和时间部分的值
TIMESTAMP数据类型被用于同时包含日期和时间部分的值(范围是UTC的时间范围,一般选择这个的更多一些)
MySQL的字符串类型表示方式如下:
CHAR类型在创建表时为固定长度,长度可以是0-255之间任何值;
在被查询时,会删除后面的空格;
VARCHAR类型的值是可变长度的字符串,长度可以指定为0到65535之间的值
BINARY和VARBINARY类型用于存储二进制字符串,存储的是字节字符串
BLOB用于存储大的二进制类型;
TEXT用于存储大的字符串类型;
表约束(开发中用的最多的表约束)
主键:PRIMARY KEY
主键是表中唯一的索引
并且必须是NOT NULL的,如果没有设置NOT NULL,那么MYSQL也会隐式的设置为NOT NULL
主键也可以是多列索引,PRIMARY KEY(key__part,...),我们一般称之为联合主键
建议:开发中主键字段应该是与业务无关的,尽量不要使用业务字段来作为主键
唯一: UNIQUE
某些字段在开发中我们希望是唯一的,不会重复的,比如手机号码、身份证号码等,这个字段我们可以使用UNIQUE来约束:
使用UNIQUE约束的字段在表中必须是不同的
对于所有引擎,UNIQUE索引允许NULL包含的列具有多个值NULL
不能为空: NOT NULL
某些字段我们要求用户必须插入值,不能为空,这个时候我们可以使用NOT NULL来约束
默认值: DEFAULT
某些字段我们希望在没有设置值时给予一个默认值,这个时候我们可以使用DEFAULT来完成
自动递增:AUTO_INCREMENT
某些字段我们不希望设置值可以进行递增,比如用户的id,这个时候可以使用AUTO_INCREMENT来完成
常用的修改表的数据库语句句
DDL语句
DML语句
DQL语句
准备数据和基本查询
where条件和if条件
结果排序和分页查询
聚合函数(表示对值集合进行操作的组(集合)函数)
外键及关联
多表之间的连接
多对多关系
对象和数据类型(对返给前端的数据)
使用两个方法 一对多时 可以采用JSON__OBJECT处理成一个对象返给别人
多对多的时候 采用 JSON_ARRAYAGG转换成一个数组,里面在用JSON_OBEJECT组成对象,这样数组里面就有对象