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 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Java基础知识——DBMS(事务、索引、用户管理、备份、三大范式) -> 正文阅读

[大数据]Java基础知识——DBMS(事务、索引、用户管理、备份、三大范式)


一、事务

要么都成功,要么都失败

  1. SQL执行,A给B转账 A现有800元,要给B转200元
  2. SQL执行,B收到A的转账 B现有200元,会受到A的转账200元

将一组事务放在一个批次中去执行

1、事务的ACID原则:原子性、一致性、隔离性、持久性

  • 原子性:针对同一个事务,上两个步骤要么一起成功,要么一起失败,不能只发生一个动作
  • 一致性:事务完成之后,符合逻辑运算。即上两个步骤执行前,A+B的钱为1000元,转账成功后,A+B的钱还是1000元,符合逻辑
  • 持久性:表示事务结束之后不随着外界原因而导致数据丢失。在事务还没有提交的时候,服务器断电,那么重启数据库之后,A800元,B200元;如果事务已经发生之后,服务器断电,那么重启数据库之后,A600元,B400元。即事务没有提交就恢复到原状,事务一旦提交就不可逆
  • 隔离性:主要是排除其他事物对本事务的影响

如果事务的隔离性出现了错误,就可能会出现以下的情况:

  • 脏读:指一个事务读取了另外一个事务未提交的数据
  • 不可重复读:在一个事务内读取表中的某一行数据,多次读取的结果不同。这个不一定是错误,只是某些场合不对
  • 虚读(幻读):是指在一个事务内读取到了别的事务插入的数据,导致前后读取不一致

2、操作

-- mysql是默认开启事务自动提交的
SET autocommit = 0; -- 关闭
SET autocommit = 1; -- 开启(默认)

-- 手动处理事务
SET autocommit = 0; -- 关闭自动提交

-- 事务开启
START TRANSACTION -- 标记一个事务的开始,从这个之后的sql都在同一个事务内

INSERT XX
INSERT XX

-- 提交:持久化(成功)
COMMIT
-- 回滚:回到原来的样子(失败)
ROLLBACK

-- 事务结束
SET autocommit = 1; -- 开始自动提交

在这里插入图片描述

测试事务实现转账:

创建一个shop的数据库,新建一张表

CREATE DATABASE shop CHARACTER SET utf8 COLLATE utf8_general_ci;
USE shop;

CREATE TABLE `account`(
	`id` INT(3) NOT NULL AUTO_INCREMENT,
	`name` VARCHAR(30) NOT NULL,
	`money` DECIMAL(9,2) NOT NULL,
	PRIMARY KEY(`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;

INSERT INTO account(`name`,`money`)
VALUEs('A',2000.00),('B',10000.00);
SET autocommit = 0;-- 关闭自动提交
START TRANSACTION; -- 开启一个事务

UPDATE account SET money=money-500 WHERE `name` = 'A' -- A减500
UPDATE account SET money=money+500 WHERE `name` = 'B'

COMMIT; --提交事务
ROLLBACK; --回滚

SET autocommit = 1; -- 恢复默认值

在这里插入图片描述

二、索引

索引是帮助mysql高效获取数据的数据结构。

1、分类

在一个表中,主键索引只能有一个,但唯一索引可以有多个

  • 主键索引(PRIMARY KEY):唯一的标识,主键不可重复,只能有一个列作为主键
  • 唯一索引(UNIQUE KEY):避免重复列出现,唯一索引可以重读,多个列都可以标识为唯一索引
  • 常规索引(KEY/INDEX):默认的
  • 全文索引(FullText):在特定的数据库引擎下才有,能快速定位数据

2、基础语法

-- 索引的使用
-- 1、在创建表的时候给字段添加索引
-- 2、创建完毕后,增加索引

-- 显示所有的索引信息
SHOW INDEX FROM student;

--增加一个全文索引 (索引名) 列名
ALTER TABLE school.student ADD FULLTEXT INDEX `studentname`(`studentname`);

-- EXPLAIN 分析sql执行的情况
EXPLAIN SELECT * FROM student; -- 非全文索引

EXPLAIN SELECT * FROM student WHERE MATCH(studentname) AGAINST('刘');

索引在小数据的时候用处不大,但是在大数据的时候可以减少查询时间。

3、索引原则

  • 索引不是越多越好
  • 不要对经常变动的数据加索引
  • 小数据量的表不需要加索引
  • 索引一般加载常用来查询的字段上

推荐文章:http://blog.codinglabs.org/articles/theory-of-mysql-index.html

三、权限管理

-- 创建用户 CREATE USER 用户名 IDENTIFIED BY '密码'
CREATE USER() fan IDENTIFIED BY '123456'

-- 修改密码(当前用户)
SET PASSWORD = PASSWORD('123456')

-- 修改密码(指定用户)
SET PASSWORD FOR fan = PASSWORD('123456')

-- 重命名 RENAME USER 原来名字 TO 新的名字
RENAME USER fan TO fan2

-- 用户授权 ALL PRIVILEGES (除了该别人授权,其他都能干)
GRANT ALL PRIVILEGES ON *.* TO fan2 

-- 查询权限
SHOW GRANTS FOR fan
SHOW GRANTS FOR root@localhost

-- 撤销权限
REVOKE ALL PRIVILEGES ON *.* FROM fan2

-- 删除用户
DROP USER fan2

四、数据库备份

保证重要的数据不丢失、数据转移。

使用cmd进行操作:

#导出
#mysqldump -h 主机 -u 用户名 -p 密码 数据库 表名 > 物理磁盘位置/文件名
mysqldump -hlocalhost -uroot -p123456 school student>D:/a.sql

mysqldump -hlocalhost -uroot -p123456 school student result>D:/b.sql

#mysqldump -h 主机 -u 用户名 -p 密码 数据库 > 物理磁盘位置/文件名
mysqldump -hlocalhost -uroot -p123456 school >D:/b.sql

#导入
#登录的情况下,要切换到指定的数据库
#source 备份文件
source D:/a.sql

五、三大范式

为什么需要数据规范化:

  • 信息重复
  • 更新异常
  • 插入异常:无法正常显示信息
  • 删除异常:丢掉有效的信息

1、第一范式

要求数据库表的每一列都是不可再分的原子项

如:

学号姓名性别学校信息
2018001张三硕士,研二
2018002李四本科,大三

在上面的表中,学校信息不满足原子性要求,修改如下:

学号姓名性别学历年级
2018001张三硕士研二
2018002李四本科大三

2、第二范式

前提:满足第一范式并且要确保每一列都与主键相关,而不能只与主键的一部分相关(针对联合主键)

如:

订单号产品号产品数量产品折扣产品价格订单金额订单时间
20180032051000.98.9287020180103
20180032062000.89.9287020180103

由于一个订单中可能包含不同的产品,因此主键由订单号和产品号联合组成。但是可以发现,订单金额和订单时间仅仅与订单号相关,与产品号无关,这就不满足第二范式,调整如下:

订单号产品号产品数量产品折扣产品价格
20180032051000.98.9
20180032062000.89.9
订单号订单金额订单时间
2018003287020180103
2018003287020180103

3、第三范式

在满足第一范式和第二范式的前提下,要消除传递依赖,确保数据表中的每一列数据都和主键直接相关,而不能间接相关

如:

学号姓名性别班主任姓名班主任性别班主任年龄
2018001张三陈洁28
2018002李四陈洁28

上表中,所有元素都完全依赖于学号,满足第二范式,但是班主任性别和班主任年龄直接依赖的是班主任姓名,而不是主键学号,因此做出调整:

学号姓名性别班主任姓名
2018001张三陈洁
2018002李四陈洁
班主任姓名班主任性别班主任年龄
张三陈洁
李四陈洁

这样就满足了第三范式的要求

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-02-09 20:46:17  更:2022-02-09 20:48:48 
 
开发: 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 13:25:22-

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