打怪升级之小白的大数据之旅(三十二)<第一个数据库--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):专门用来与数据库通信的语言
数据库与数据表
- 数据库就像下面这样
![在这里插入图片描述]()
- 数据表就像这样
![在这里插入图片描述]()
数据库、数据表与数据的关系
- 将数据放到表中,表再放到库中
- 一个数据库中可以有多个表,每个表都有一个的名字,用来标识自己。表名具有唯一性。
- 表具有一些特性,这些特性定义了数据在表中如何存储,类似java中 “类”的设计。
- 表由列组成,我们也称为字段。所有表都是由一个或多个列组成的,每一列类似java 中的”属性”
- 表中的数据是按行存储的,每一行类似于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语言的基础,最为重要
- DML用于查询与修改数据记录,包括如下SQL语句
- DDL Data Definition Language 数据定义语言
- DDL用于定义数据库的结构,比如创建、修改或删除数据库对象,包括如下SQL语句
- CREATE TABLE:创建数据库表
- ALTER TABLE:更改表结构、添加、删除、修改列长度
- DROP TABLE:删除表
- CREATE INDEX:在表上建立索引
- DROP INDEX:删除索引
- DDL用于定义数据库的结构,比如创建、修改或删除数据库对象,包括如下SQL语句
- DCL Data Control Language 数据控制语言
- DCL用来控制数据库的访问,包括如下SQL语句
- GRANT:授予访问权限
- REVOKE:撤销访问权限
- COMMIT:提交事务处理
- ROLLBACK:事务处理回退
- SAVEPOINT:设置保存点
- LOCK:对数据库的特定部分进行锁定
- DCL用来控制数据库的访问,包括如下SQL语句
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的使用
安装我就不介绍了,网上教程又详细又好用,大家自行百度哈,我就直接介绍我们大数据可能会用到的一些操作以及知识点
语法规范
- SQL 语言大小写不敏感(数据大小写是敏感的)。
- SQL 可以写在一行或者多行
- 关键字不能被缩写也不能分行
- 各子句一般要分行写。
- 使用缩进提高语句的可读性(我们要养成这个良好的习惯)
- 在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进行铺垫。好了,今天的内容就是这些,我们下期见





浙公网安备 33010602011771号