MySQL

118 阅读4分钟

关系型数据库: 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组成对象,这样数组里面就有对象