ER8oKX5myE0-HQ

数据库概述

  • 数据库通俗来讲就是一个存储数据的仓库,数据库本质上就是一个软件。一个程序

  • 常见的数据库有哪些?

    • 关系型数据库

      • MySQL、Oracle、DB2、SQL Server、Postgre SQL等
      • 关系型数据库通常我们会创建很多个二维数据表
      • 数据表之间相互关联起来,形成 一对一、一对多、多对多 等关系
      • 之后可以利用SQL语句在多张表中查询我们所需的数据
      • 支持事务,对数据的访问更加安全
    • 非关系型数据库

      • MongoDB、Redis、Memcached、HBse 等
      • 非关系型数据库的英文其实是 Not only SQL,也简称为 NoSQL
      • 相当于已非关系型数据库比较简单一些,存储数据也会更加自由(甚至我们可以直接将一个复杂的json对象直接塞入到数据库中)
      • NoSQL 是基于 Key-Value 的对用关系,并且查询的过程中不需要经过 SQL 解析,所以性能更高
      • NoSQL 通常不支持事务,需要在自己的程序中来保证一些原子性的操作
  • 开发中如何选择?

    • 目前在公司进行后端开发(Node、Java、Go等),还是以关系型数据库为主
    • 比较常用的用到菲关系型数据库的,在爬取大量数据进行存储时,会比较常见

认识 MySQL

  • MySQL 是一个关系型数据库,其实本质上就是一个软件、一个程序

    • 这个程序中管理着多个数据库
    • 每个数据库中可以有多张表
    • 每个表可以有多条数据
  • 查看数据库

    show databases;
    
    复制成功
    1
    • MySQL 默认的数据库:

      • infomation_schema:信息数据库,其中包括 MySQL 在维护的其他数据库、表、列、访问权限等信息
      • performance_schema:性能数据库,记录着 MySQL Server 数据库引擎在运行过程中的一些资源消耗相关的信息
      • mysql:用于存储数据库管理者的用户信息、权限信息以及一些日志信息等
      • sys:相当于是一个简易版的performance_schema,将性能数据库中的数据汇总成更容易理解的形式
  • 创建数据库-表

    # 创建数据库
    create database coderhub;
    # 查看数据库
    show databases;
    # 指定要使用的数据库
    use coderhub;
    # 查看当前正在使用的数据库
    select database();
    # 查看数据库中的表
    show tables;
    # 创建表
    create table users(name varchar(10), age int, height double);
    # 查看表中数据
    select * from users;
    # 向表中插入数据
    insert into users (name, age, height) values ('kobe', 40, 1.98);
    
    复制成功
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16

认识 SQL 语句

  • 我们希望数据库(特别是在程序中),就需要有和数据库沟通的语言,这个言就是 SQL:

    • SQL 是 Structured Query Language,称之为结构化查询语言,简称 SQL
    • 使用 SQL 遍写出来的语句,就称之为 SQL 语句
    • SQL 语句可以用于对数据库进行操作
  • 事实上,常见的关系型数据库SQL语句都是比较相似的,所以你学会了MySQL 中的 SQL 语句,之后去操作比如 Oracle 或者其他的关系型数据库,也是非常方便的

  • SQL 语句的常用规范:

    • 通常关键字是大写的,比如 CREATE、TABLE、SHOW
    • 一条语句结束后,需要以 ; 结尾
    • 如果遇到关键性作为表名或者字段名称,可以用 `` 包裹
  • SQL 语句的分类:

    • 常见的 SQL 语句分为4类

      • DDL (Data Definition Language):数据定义语言

        • 可以通过 DDL 语句对数据库或者表进行:创建、删除、修改等操作
      • DML (Data Manipulation Language):数据操作语言

        • 可以通过 DML 语句对表进行:添加、删除、修改等操作
      • DQL (Data Query Language):数据查询语言

        • 可以通过 DQL 从数据库中查询记录(重点)
      • DCL (Data Control Language):数据控制语言

        • 对数据库、表格的权限进行相关访问控制操作
  • 数据库的操作

# 查看所有数据库
show databases;

# 选择某一个数据库
use coderhub;

# 查看当前正在使用的数据库
select database();

# 创建一个新的数据库
-- create database douyu;
# 首先判断数据库是否已存在,避免重复创建报错
create database if not exists douyu;
# 指定字符集utf8mb4、排序规则utf8mb4_0900_ai_ci
create database if not exists huya default character set utf8mb4 collate utf8mb4_0900_ai_ci;

# 删除数据库
 drop database if exists douyu;

 # 修改数据库的编码
 alter database huya character set = utf8 collate = utf8_unicode_ci;
复制成功
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
  • 数据表的操作
# 查看所有的表
show tables;

# 新建表
create table if not exists `students` (
	`name` varchar(10),
    `age` int,
    `score` int
);

# 删除表
drop table if exists `moment`;

# 查看表的结构
desc `students`;

# 查看创建表的SQL语句
show create table `students`;
-- CREATE TABLE `students` (
--    `name` varchar(10) DEFAULT NULL,
--    `age` int DEFAULT NULL,
--    `score` int DEFAULT NULL
--  ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
复制成功
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

MySQL 数据类型

MySQL 数据类型 | 菜鸟教程open in new window

(关于数字类型的总结) MySQL数据类型 - MySQL教程™open in new window

  1. 数字类型

    • 整数数字类型:INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT
    • 浮点数字类型:FLOAT, DOUBLE (FLOAT 是 4 个字节,DOUBLE 是8个字节)
    • 精确数字类型:DECIMAL, NUMERIC (DECIMAL是NUMERIC的实现形式)
  2. 日期和时间类型

    • YEARYYYY 格式显示值,范围 1901到2155,和 0000

    • DATE 类型用于具有日期部分但没有时间部分的值

      • DATE 以格式 YYYY-MM-DD 显示值
      • 支持的范围是 1000-01-019999-12-31
    • DATETIME 类型用于包含日期部分和时间部分的值

      • DATETIME 以格式 YYYY-MM-DD hh:mm:ss 显示值
      • 支持的范围是 1000-01-01 00:00:009999-12-31 23:59:59
    • TIMESTEMP 数据类型被用于包含时间和日期部分的值

      • TIMESTAMP 以格式 YYYY-MM-DD hh:mm:ss 显示值
      • 但是它的范围是 UTC 的时间范围:**1970-01-01 00:00:012038-01-19 03:14:07 **
  • 另外:DATETIMETIMESTAMP 值可以包括在高达微秒(6位)精度的后小数秒一部分

    • 比如 DATETIME 表示的范围可以是 1000-01-01 00:00:00.0000009999-12-31 23:59:59.999999
  1. 字符串(字符和字节)类型

    • CHAR 类型在创建表时为固定长度,长度可以是0 到 255 之间的任何值
    • 在被查询时,会删除后面的空格
    • VARCHAR 类型的值是可变长度的字符串,长度可以指定为 0 到 65535 之间的值
    • 在被查询时,不会删除后面的空格
    • BINARYVARBINARY 类型用于存储二进制字符串,存储的是字节字符串
    • BLOB 用于存储大的二进制类型
    • TEXT 用于存储大的字符类型
  2. 空间类型

  3. JSON 数据类型

约束open in new window

  • 主键 PRIMARY KEY

    • 一张表中,我们为了区分每一条记录的唯一性,必须有一个字段永远不会重复,并且不会为空的,这个字段我们通常将它设置为主键:

      • 主键是表中唯一的索引
      • 并且必须是 NOT NULL 的,如果没有设置 NOT NULL,那么 MySQL 也会隐式的设置为 NOT NULL
      • 主键也可以是多列索引,PRIMARY KEY(key_part, ...),我们一般称之为联合主键
      • 建议:开发中主键字段应该是和业务无关的,尽量不要使用业务字段来作为主键
  • 唯一:UNIQUE

    create table if not exists `students` (
      `name` varchar(10),
        `age` int,
        `score` int,
        `height` decimal(10, 2),
        `birthday` timestamp,
        `phonenumber` varchar(20) unique
    );
    
    复制成功
    1
    2
    3
    4
    5
    6
    7
    8
    • 某些字段在开发中我们希望是唯一的,不会重复的,比如手机号码、身份证号码等,这个字段我们可以使用 UNIQUE 来约束
    • 使用 UNIQUE 约束的字段在表中必须是不同的
    • 对于所有引擎,UNIQUE 索引允许 NULL 包含的列有多个值 NULL
  • 不能为空:NOT NULL

    • 某些字段我们要求用户必须插入值,不可以为空,这个时候我们可以使用 NOT NULL 来约束
  • 默认值:DEFAULT

    • 某些字段我们希望在没有设置值时给予一个默认值,这个时候我们可以使用 DEFAULT 来完成
  • 自动递增:AUTO_INCREMENT

    • 某些字段我们希望不设置值时可以进行递增,比如用户的id,这个时候可以使用 AUTO_INCREMENT 来完成
  • 外键约束也是最常用的一种约束手段 (多表关系)

晓露寝安浅云逍遥十漾轻拟