IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> MySQL介绍(持续更新…) -> 正文阅读

[大数据]MySQL介绍(持续更新…)

0MYSQL介绍

0.1MySQL内容介绍

基本sql语句

实际问题sql

索引的介绍

事务的概念

JDBC编程:通过java代码操作数据库

连接池概念:c3p0,Druid等连接池

拓展:maven使用,构建

0.2MySQL安装

Windows下MySQL安装

参考安装教程:Windows下安装MySQL详细教程 - m1racle - 博客园

(安装最好一次成功(前提把教程每一步理解干什么),重复卸载安装会导致卸载数据不完整(比如注册表),再次安装时不好安装容易失败)

1了解MySQL

通过 二维表 建立起关系

关系型数据库有微软的SQL Server、甲骨文提供的Oracle和MySQL

MySQL分为企业版和社区版,社区版是完全免费且开源的

MySQL和其他的关系型数据库的区别是,支持插件式的存储引擎,存储引擎包括innodb、myisam等

大量的公司使用的MySQL作为数据存储层方案,比如:腾讯、Facebook等。

技术层面来看,MySQL设计成C/S客户端/服务端的模型,用户可以通过MySQL 的Client向MySQL的服务端发送命令,MySQL服务端对命令进行相应,MySQL适合做集群化环境处理,方便做主从复制、读写分离操作。

mysql服务端为了提高用户的并发量,采用了是IO复用和线程池的,实现网络高并发的经典模型

2SQL语句的划分

DDL(Data Definition Language)数据定义语言,该语言定义了不同的数据库、表、列、索引等数据库对象的定义

DML(Data Manipulation Language)数据操纵语言,主要用于数据库中数据库记录的增删改查

DCL(Data Control Language)数据控制语言,对数据库设置访问权限和安全级别,grant,remove等关键字都是数据控制SQL

3MYSQL的数据类型

在MySQL中,二维表来存储数据,需要指定字段的数据类型,类型是用来规定数据大小使用

img

3.1 整数类型

img

3.2浮点类型

img

浮点数,和钱相关的计算,推荐使用decimal

3.3日期类型

img

3.4字符串类型

3.4.1char类型和varchar类型

3.4.2text类型

3.4.3enum类型

3.4.4set类型

3.5二进制类型

4数据库范式

候选码:若关系中的某一属性组的值能唯一标识一个元组,而其子集不能,则成为该属性组为候选码。

主码:若一个关系有多个候选码,则选定其中一个为主码。

主属性:候选码的诸属性成为主属性。

非主属性 :不包含在任何候选码中的属性称为非主属性。

外键(外码):一个属性,是其他表中的一个属性,当前表可以通过该属性和其他表建立联系

主键:在一个表中一个属性(一个组合属性)可以找到表中其他的属性(主键具有唯一性)

4.1第一范式(1NF)每一列要保持原子特性

第一范式:关系中的每个属性都是不可再分的原子项。

注意:不符合1NF不能称之为关系型数据库

示例:

表中存在一个字段地址字段,可以细分为省、市、区,该字段是不满足第一范式的,将表拆分成专门地址信息

用户表(name、age、address);

address不满足第一范式,进行拆分成两个表:

用户表(name、age、addressId)地址表(addressId,prince、city,..)

4.2第二范式(2NF):属性需要完全依赖主键(针对联合主键)

(消除非主属性对主码的部分函数依赖)

非主属性完全依赖于主键,如果不是依赖主键,应该拆分成新的主题,设计成一对多的关系

示例:

选课关系表(学号、姓名、年龄、课程名称、成绩、学分),联合主键(学号、课程名称)

学分只和课程名称相关,学分只部分依赖联合主键

姓名、年龄和学号相关,姓名,年龄部分依赖于联合主键

成绩是完全依赖于联合主键

不满足第二范式,进行拆分成下面三个表: 学生表(学号、姓名、年龄) 主键:学号

课程表(课程名称、学分) 主键:课程名称

选课成绩表(学号、课程名称、成绩) 主键:学号+课程名称

4.3第三范式(3NF):属性不依赖于非主属性

(消除非主属性对主码的传递函数依赖)

第三范式:保持函数依赖和无损连接。

一般的关系型数据库满足3NF就可以

示例:

学生表(学号、姓名、年龄、学院、学院电话) 主键:学号

姓名、年龄、学院等都依赖于主键可以直接查询

但学院电话是需要先查询到学院,在查询到学院电话,即学院电话不依赖于主键,存在传递依赖,将表进行拆分,消除传递依赖

学生表(学号、姓名、年龄、学院) 主键:学号

学院表(学院名称、学院电话) 主键:学院名称

4.4BC范式(BCNF):每一个表中只有一个候选键

(消除任何属性对主码的部分和传递函数依赖)

BC范式在满足前三范式的基础上的一种特殊情况,

即每个表中的只有一个候选键(数据库中每一行的值都不同,则称之为候选键)

4.5第四范式(4NF):消除表中的多值依赖

(消除非平凡且非函数依赖的多值依赖)

示例:学生表(学号、姓名、技能)

技能描述:“Java、MySQL” “JAVA、MYSQL”

需要维护数据一致性问题,进行拆分

学生表(学号、姓名)

技能表(技能ID、技能名称)

学生技能表(学号、技能ID)

通过范式可知:范式越高、表越多、表越多带来问题

1、查询时需要连接多表,增加了查询的复杂度

2、表越多,查询过程中会降低数据库的查询性能

5SQL操作

5.1连接数据库

连接:

mysql ?-u XXX -p XXX;

mysql代表是客户端的命令 -u后面跟的是数据库用户名 -p后面是需要输入的密码

退出:

exit;

5.2库操作

1、创建数据库的SQL语句格式:

create database database_name;

2、查看数据库的SQL语句格式:

show databases;

3、删除数据库SQL语句格式

drop ?database database_name;

4、选择数据库的SQL语句格式

use databse_name;

5、查看数据库下的表列表SQL语句格式

show tables;

5.3表操作

5.3.1创建表

create table table_name(

属性名 数据类型 [完整性约束条件],

属性名 数据类型 [完整性约束条件]

);

!逗号隔开各个属性,最后一个除外

在表中给定属性时需要指定合适的类型,还可以给定完整性约束(可有可无,可以表示主键、非空、唯一性等)

插入数据SQL:

insert into table_name(属性1,属性2,…,属性n) values(属性值1,属性值2,…,属性n);

5.3.2查看表

第一种方法

desc table_name;

通过desc 命令查看表的字段,名称,类型,默认值,备注信息

第二种方法

show create table_name; ?-- 结尾可以使用";"或者"\G"

可以查看 创建表的sql语句,存储引擎和字符集编码

5.3.3修改表

可以通过alter命令来修改表

①修改表名

alter table old_table_name rename new_table_name;

②修改字段属性名

alter table table_name change 就属性名 新属性名 新数据类型;

③修改属性类型

alter table table_name modify 属性名 属性类型;

④增加字段属性

alter table table_name add 属性名 类型 [完整性约束] [after  属性];

⑤删除字段属性

alter table table_name drop 属性名;

⑥调整已有字段属性的排列顺序

alter table table_name modify 属性名1 类型 first;  -- 把属性1 放在最开始
alter table table_name modify 属性名1 类型 after 属性2 ; -- 把属性1放在属性2的后面

5.3.4查询表

select * from table_name{where 条件表达式}{group by 属性名[having 条件表达式]}[ order by 属性名[asc(默认)|desc]];

①带 in的 子查询

一般放在where条件后,批量查询

(not) in(元素1、元素2、…、元素n)

②带 between 的范围查询

between 元素1 and 元素2

③带 like 的模糊匹配

like'字符串'

针对字符串,可以携带通配符: % 表示0个或者多个字符串,- 表示单个字符

④空值查询

is (not) null

⑤带and的多条件查询

条件表达式1 and 条件表达式2 and 条件表达式n

⑥带 or 的多条件查询

条件表达式1 or 条件表达式2 or 条件表达式n

⑦去重处理

select distinct 属性名;

⑧对结果排序

order by 属性名[asc(默认升序)|desc];

⑨分组查询

group by 属性名 having 条件表达式

!分组查询和去重有什么区别?

⑩limit的分页查询

limit len; -- limit 带一个参数,表示不指定初始位置的limit,表示从0开始读取len长度数据开始返回
limit num,off; -- 两个参数,第一个参数表示起始位置,第二个参数表示每次读取的长度

数据库中数据处理的sql:

-- 单挑插入数据
insert into table_name( 属性名1,属性名2,,属性名n) values(元素1,元素2,,元素n);
-- 批量插入数据
insert into table_name( 属性名1,属性名2,,属性名n) values(元素1,元素2,,元素n),(元素1,元素2,,元素n),,,(元素1,元素2,,元素n);

修改数据

update table_name set 属性名 = 新元素 where 条件表达式;

删除数据

delete from table_name where 条件表达式;

5.4多表查询

内连接,外连接(左连接,右连接)

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-10-04 12:55:11  更:2021-10-04 12:56:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 1:18:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码