打怪升级之小白的大数据之旅(三十二)<第一个数据库--Mysql>

打怪升级之小白的大数据之旅(三十二)

第一个数据库–Mysql

上次回顾

  • 大家好,经过JavaSE的洗礼,相信大家已经对编程这件事比较熟悉了,接下来是学习大数据生态体系前的最后两章内容:Mysql与JDBC。它们两个也可以归集到JavaSE中,但我想把它们单独抽出来,因为Mysql是我们认识的第一个数据库
  • Mysql基础操作示例代码中的数据集我已经上次了,大家可以根据需求自行下载,下载链接

数据的持久化存储

  • 前面学习Java的时候,我们的数据是保存在哪里呢?数组、集合还有流,数组和集合保存的数据是存储在内存中,当程序终止后,数据就会自动销毁。为了对数据进行持久化存储,我们接触到了流。
  • 流可以根据需求将不同数据保存到文件中,但它有很大的缺陷在这里插入图片描述
  • 就像上图,我有一个妹子图集(一不小心暴露了本性),我想查找其中某张图时,就必须在搜索框搜索,或者通过眼睛去看;很不方便,如果通过IO流读取又没必要那么麻烦,于是就有了数据库

数据库

数据库概述

数据库是什么?它就像我们现实生活中的仓库,用于存放物品,想象一下,在我们日常取快递的时候,快递员是怎么样找到你的快递呢?在这里插入图片描述
就像上图,快递员收到快递后会根据一个规则对快递进行编号,你会收到快递码,然后根据快递码就可以找到自己的快递啦

数据库的分类

  • 常见的数据库分为关系型数据库与非关系型数据库与键值数据库
    • 关系型数据库称为SQL,它就像我们学校时,学生考试的成绩表,它的特点是数据之间是有一定的关系存在的,因此,关系型数据库是在统一的规则下进行存储
    • 非关系型数据库称为NOSQL,它就像我们人,每个人都会有自己的特点,因此在存储数据的时候是以键值对的方式进行存储(是不是想到了Map集合?),做过开发的小伙伴应该听过json文件。json就是一个大的集合
    • 键值数据库就是以键值来存储的数据库,我们后面在Spark生态体系中接触的Redis就是键值数据库
    • 我们首先从认识关系型数据库开始,其他的数据库后面会慢慢接触到,先让大家有个认知

关系型数据库的构成:

  • DB
    • 数据库(database):存储数据的“仓库”。它保存了一系列有组织的数据。
  • DBMS
    • 数据库管理系统(Database Management System)。数据库是通过DBMS创建和操作的容器
  • SQL
    • 结构化查询语言(Structure Query Language):专门用来与数据库通信的语言

数据库与数据表

  • 数据库就像下面这样在这里插入图片描述
  • 数据表就像这样在这里插入图片描述

数据库、数据表与数据的关系

  1. 将数据放到表中,表再放到库中
  2. 一个数据库中可以有多个表,每个表都有一个的名字,用来标识自己。表名具有唯一性。
  3. 表具有一些特性,这些特性定义了数据在表中如何存储,类似java中 “类”的设计。
  4. 表由列组成,我们也称为字段。所有表都是由一个或多个列组成的,每一列类似java 中的”属性”
  5. 表中的数据是按行存储的,每一行类似于java中的“对象”
  • 继续想象一下,我们刚刚考完期中考试,老师阅卷后将根据班级人员名单填入考试成绩,然后把所有班级的成绩单存放到保险柜中…

MySQL概述

  • SQL是一个查询语言,我们说的MySQL,Oracle等指的都是数据库的管理系统在这里插入图片描述
    在这里插入图片描述
  • DBMS与SQL、DB的关系就像上图,DBMS就是管家,管家通过SQL语句来管理DB

SQL的优点

  • 不是某个特定数据库供应商专有的语言,几乎所有DBMS都支持SQL
  • 简单易学
  • 虽然简单,但实际上是一种强有力的语言,灵活使用其语言元素,可以进行非常复杂和高级的数据库操作

SQL 的分类

  • DML Data Manipulation Language 数据操纵语言
    • DML用于查询与修改数据记录,包括如下SQL语句
      • INSERT:添加数据到数据库中
      • UPDATE:修改数据库中的数据
      • DELETE:删除数据库中的数据
      • SELECT:选择(查询)数据
      • SELECT是SQL语言的基础,最为重要
  • DDL Data Definition Language 数据定义语言
    • DDL用于定义数据库的结构,比如创建、修改或删除数据库对象,包括如下SQL语句
      • CREATE TABLE:创建数据库表
      • ALTER TABLE:更改表结构、添加、删除、修改列长度
      • DROP TABLE:删除表
      • CREATE INDEX:在表上建立索引
      • DROP INDEX:删除索引
  • DCL Data Control Language 数据控制语言
    • DCL用来控制数据库的访问,包括如下SQL语句
      • GRANT:授予访问权限
      • REVOKE:撤销访问权限
      • COMMIT:提交事务处理
      • ROLLBACK:事务处理回退
      • SAVEPOINT:设置保存点
      • LOCK:对数据库的特定部分进行锁定

SQL是一个大的概念,它是对关系型数据库进行增删改查操作的一个标准,基本上95%以上的操作都一样,但每个DBMS都有属于自己的SQL语句,接下来首先介绍一下数据库与数据表的常用API

数据库的连接

我们前面已经介绍了数据库、数据表与数据之间的关系,那么我们如何使用数据库呢?很简单,找到这个仓库,然后输入账号和密码即可

mysql -uroot -p xxx
# -u 默认是root,连接mysql的账号
# -p 是我们刚才输入账号的密码

数据库常用命令

#查看所有的库
SHOW DATABASES;
#选库
USE 库名;

#创建库
#create database [IF NOT EXISTS] 库名 [CHARACTER SET '编码集']
CREATE DATABASE demo1;
CREATE DATABASE demo2 CHARACTER SET 'utf8';
#IF NOT EXISTS :如果库不存在则创建,存在则不创建。
#如果没有该字段库存在则报错。
CREATE DATABASE IF NOT EXISTS demo1;
#可以修改默认的编码集--详见PPT

#查看库的信息
SHOW CREATE DATABASE demo2;

#删除库
#DROP DATABASE [if exists] 库名;
#if exists : 如果库存在则删除,不存在则不删除。
#如果没有该字段库不存在则报错。
DROP DATABASE IF EXISTS demo6;

#修改库的编码集
ALTER DATABASE demo2 CHARACTER SET 'gbk';

表的常用命令

#创建表---方式一(白手起家)
#注意:默认表的编码集和库的编码集相同。
CREATE TABLE student(
sid INT,
sname VARCHAR(20)
);

#指定表的编码集
CREATE TABLE student2(
sid INT,
sname VARCHAR(20)
)CHARACTER SET 'utf8';

#IF NOT EXISTS : 如果表不存在则创建,存在则不创建,如果没有该字段表存在则报错。
CREATE TABLE IF NOT EXISTS student2(
sid INT,
sname VARCHAR(20)
)CHARACTER SET 'utf8';

#创建表--方式二(基于现有的表创建新表)
#创建表:基于现有的表创建新表(没有数据)
CREATE TABLE st LIKE myemployees.`employees`;

#创建表:基于查询的结果创建成一张表
CREATE TABLE st2
SELECT employee_id,salary
FROM myemployees.employees;

#查看表信息
SHOW CREATE TABLE student2;

#查看表结构
DESCRIBE student;
DESC student;

#删除表
DROP TABLE st;

对列的操作




CREATE TABLE person(
id INT,
NAME VARCHAR(20)
);



/*
对列进行操作:
alter table 表名 add/drop/change/modify column .......
*/
#添加一列
ALTER TABLE person ADD COLUMN age INT;
#删除一列
ALTER TABLE person DROP COLUMN age;
#修改列的名字
ALTER TABLE person CHANGE COLUMN age age2 INT;
#修改列的类型
ALTER TABLE person MODIFY COLUMN age2 VARCHAR(20);

DESC person;

#修改表的名字
ALTER TABLE person RENAME TO person2;


MySQL的使用

安装我就不介绍了,网上教程又详细又好用,大家自行百度哈,我就直接介绍我们大数据可能会用到的一些操作以及知识点

语法规范

  1. SQL 语言大小写不敏感(数据大小写是敏感的)。
  2. SQL 可以写在一行或者多行
  3. 关键字不能被缩写也不能分行
  4. 各子句一般要分行写。
  5. 使用缩进提高语句的可读性(我们要养成这个良好的习惯)
  6. 在MySQL中,通常情况下''" "可以互相交换使用,在特殊情况下,如需要嵌套时就必须进行区别

注释

-- 单行注释
# 单行注释
/*多行
  注释
*/

增删改的API

  • 任何数据,它都有由增删改查四个操作组成,一般来说,查询的介绍要更加复杂一下,所以我单独抽出来一章来介绍Mysql的查询,虽然我们大数据使用Mysql的次数不多,但为了将来可能会用到,我就详细地把常用的API操作记录下来,方便大家查找

向表中插入数据:

  • 语法格式:
    insert into 表名(字段名1,字段名2....) 
    	values(数据1,数据2.....),(数据1,数据2.....) ......
    
  • 示例代码:
    #插入一条数据
    INSERT INTO person2(NAME,id,age2) VALUES('aaa',1,'12');
    #插入多条数据
    INSERT INTO person2(id,NAME,age2) VALUES(2,'ccc','12'),(3,'eee','12');
    #如果插入的是全数据那么表名后面的字段可以省略。但是要注意顺序。
    INSERT INTO person2 VALUES(4,'fff','19');
    
    #将查询的结果插入到当前表中
    INSERT INTO person2(id,NAME)
    SELECT employee_id,last_name
    FROM myemployees.`employees`;
    
    #下面的写法不对
    INSERT INTO person2(id,NAME)
    SELECT *
    FROM myemployees.`employees`;
    
  • 注意事项
    • 查询的字段和插入的字段的类型要匹配。
    • 查询的字段的个数要和插入字段的个数要匹配。

删除数据:

  • 语法格式:
    delete from 表名 [where 过滤条件]
    delete from 表名 :将表中所有的内容删除
    
  • 示例代码
    DELETE FROM person2 WHERE id<100;
    DELETE FROM person2;
    

修改数据

  • 语法格式
    update 表名 set 字段名1=1,字段名2=2 .... [where 过滤条件]
    
  • 示例代码
    UPDATE person2 SET NAME='longge' WHERE id=1;
    UPDATE person2 SET NAME='cangjie',age2='18' WHERE id=2;
    UPDATE person2 SET NAME='canglaoshi';
    

Mysql的约束

约束概述

  • 为了保证数据的一致性和完整性,SQL规范以约束的方式对表数据进行额外的条件限制。
  • 约束是表级的强制规定
  • 可以在创建表时规定约束(通过 CREATE TABLE 语句),或者在表创建之后也可以(通过 ALTER TABLE 语句)
  • 一句话说,约束就是为了限制我们数据按照我们制定的规则来进行存储,它有点类似我们Java中学到的泛型

约束分类

约束主要分为以下几类

  • NOT NULL 非空约束,规定某个字段不能为空
  • UNIQUE 唯一约束,规定某个字段在整个表中是唯一的
  • PRIMARY KEY 主键(非空且唯一)
  • FOREIGN KEY 外键
  • CHECK 检查约束(Mysql是不支持这个约束的,但别的sql支持)
  • DEFAULT 默认值

根据约束数据列的限制,约束可分为:

  • 单列约束:每个约束只约束一列
  • 多列约束:每个约束可约束多列数据

根据约束的作用范围,约束可分为:

  • 列级约束只能作用在一个列上,跟在列的定义后面
  • 表级约束可以作用在多个列上,不与列一起,而是单独定义

PRIMARY KEY 约束

  • 主键约束相当于唯一约束+非空约束的组合,主键约束列不允许重复,也不允许出现空值
  • 如果是多列组合的主键约束,那么这些列都不允许为空值,并且组合的值不允许重复。
  • 每个表最多只允许一个主键,建立主键约束可以在列级别创建,也可以在表级别上创建。
  • MySQL的主键名总是PRIMARY KEY,当创建主键约束时,系统默认会在所在的列和列组合上建立对应的唯一索引
  • 主键约束的语法格式
// 对列(字段)进行约束
CREATE TABLE emp4(
id INT AUTO_INCREMENT PRIMARY KEY,
NAME VARCHAR(20)
);
// 对表进行约束
CREATE TABLE emp5(
id INT NOT NULL AUTO_INCREMENT,
NAME VARCHAR(20),
pwd VARCHAR(15),
CONSTRAINT emp5_id_pk PRIMARY KEY(id)
);
// 组合约束
CREATE TABLE emp6(
id INT NOT NULL,
NAME VARCHAR(20),
pwd VARCHAR(15),
CONSTRAINT emp7_pk PRIMARY KEY(NAME,pwd)
);

UNIQUE 约束

  • UNIQUE约束可以对当前所在表中的字段进行约束,可以为单个字段进行约束,也可以进行组合约束
  • 在Mysql中,使用UNIQUE约束通常用于数据的去重,即首先设置一个字段为UNIQUE约束,然后在添加数据,当该字段中数据重复时,就无法再次插入
  • 示例代码:
CREATE TABLE USER(
 id INT NOT NULL,
 NAME VARCHAR(25),
 PASSWORD VARCHAR(16),
 #使用表级约束语法
 CONSTRAINT uk_name_pwd UNIQUE(NAME,PASSWORD)
);

FOREIGN KEY 约束

外键约束可以针对两张不同的表,来创建一个约束,通常使用外键约束表称为主从表

// 主表
CREATE TABLE dept(
dept_id INT AUTO_INCREMENT PRIMARY KEY,
dept_name VARCHAR(20)
);
//从表
CREATE TABLE emp(
emp_id INT AUTO_INCREMENT PRIMARY KEY,
last_name VARCHAR(15),
dept_id INT,
CONSTRAINT emp_dept_id_fk FOREIGN KEY(dept_id) 
REFERENCES dept(dept_id)
);

总结

本章首先介绍了数据库的概念、数据库与表的相关操作API,接着介绍了数据的增删改,下一期我会为大家带来Mysql的的查询,任何数据库的查询都是比较重要的知识点.学习Mysql是为了我们学习Hadoop生态体系的hive进行铺垫。好了,今天的内容就是这些,我们下期见

posted @ 2021-04-29 08:38  数据民工  阅读(17)  评论(0)    收藏  举报