JAVA全栈开发 day18MySql03

一、复习

为什么要用数据库数据库好处数据库的发展史​	层次模型​    网状模型​    关系模型(二维表专门存储数据, 表与表的关联)​         表与表的关系: 1对1   ,1对多,多对多​     非关系模型关系模型与非关系的区别关系数据库有哪些?mysql , oracle , sql server , sybase , db2 等​     mysql :几十M 开源**免费**得的数据库,体积非常小​    oracle : 性能高,收费非常贵 

  • 关系型数据库的优缺点

    优点:1、容易理解:二维表结构是非常贴近逻辑世界一个概念,关系模型相对网状、层次等其他模型来说更容易理解;

    2、使用方便:通用的SQL语言使得操作关系型数据库非常方便;

    3、易于维护:丰富的完整性(实体完整性、参照完整性和用户定义的完整性)大 大减低了数据冗余和数据不一致的概率;

    4、支持SQL,可用于复杂的查询。

  • 缺点:

    1、为了维护一致性所付出的巨大代价就是其读写性能比较差;

    2、固定的表结构;

    3、高并发读写需求;

    4、海量数据的高效率读写

DBMS, RDBMS

mysql 数据库
mysql 8.x

mysql 5.x

SQL:结构化查询语言

DDL

DML

DQL

DCL

  • DDL:

    创建数据库

    使用数据库

    删除数据库

    创建表

    修改表

    删除表

  • DML

    插入数据 insert into

    ​ 删除数据 delete from xxx , TRUNCATE TABLE 表名

    ​ 修改数据 update

  • DQL

    简单查询

    条件查询

    模糊查询

    范围:between xx and xxx , in , not in

    聚合函数

    分组函数

    子查询

    表联接(重点)

存储引擎(有哪些,各有什么特点)事务(多个sql操作看成一个不可分割整体,称为事务)ACID四大特性数据库共定义了四种隔离级别: 
Serializable:可避免脏读、不可重复读、虚读情况的发生。(串行化) 
Repeatable read:可避免脏读、不可重复读情况的发生。(可重复读)(mysql默认) 
Read committed:可避免脏读情况发生(读已提交)。 
Read uncommitted:最低级别,以上情况均无法保证。(读未提交) ---------------- 数据库的数据类型int, float, double, decimal , char , varchar , text , nchar, nvarchar, ntext 数据完整性(完整性 = 准备性 + 可靠性)实体完整性(保证行的有效性): 主键约束,唯一约束,标识列域完整性(保证列的有效性):default , not null , check约束引用完整性(保证引用有效性): 外键约束​    外键​    外键约束(注:互联网一般不加外键,在代码中保证它的有效性)自定义完整性补充: 主键约束,唯一约束主键约束: 加了主键约束,值不能重复(不能为null), 主键可以组合列唯一约束:值不能重复(可以null)

二、编码

  • 字符集 :是一套符号和编码的规则
  • 校验规则:是对该套符号和编码的校验,定义符号的排序和比较规则,其中区分大小写,跟校验规则有关。

show character set 查询mysql支持的字符集

  • gbk_chinese_ci 不区分大小写
  • gbk_bin 区分大小写
//避免创建数据库及表出现中文乱码和查看编码方法
//1、创建数据库的时候:
CREATE DATABASE `test`
CHARACTER SET 'utf8'
COLLATE 'utf8_general_ci';
//2、建表的时候
CREATE TABLE `database_user` (
`ID` varchar(40) NOT NULL default '',
`UserID` varchar(40) NOT NULL default '',
) ENGINE=MYISAM DEFAULT CHARSET=utf8;

三、mysql 函数的使用

1 字符串函数

charset(str) //返回字符串字符集 concat (string2 [,]) //连接字串 instr (string ,substring ) //返回substring首次在string中出现的位置,不存在返回0 lcase (string2 ) //转换成小写 left (string2 ,length ) //从string2中的左边起取length个字符 length (string ) //string长度 load_file (file_name ) //从文件读取内容 locate (substring , string [,start_position ] ) 同instr,但可指定开始位置 lpad (string2 ,length ,pad ) //重复用pad加在string开头,直到字串长度为length ltrim (string2 ) //去除前端空格 repeat (string2 ,count ) //重复count次 replace (str ,search_str ,replace_str ) //在str中用replace_str替换search_str rpad (string2 ,length ,pad) //在str后用pad补充,直到长度为length rtrim (string2 ) //去除后端空格 strcmp (string1 ,string2 ) //逐字符比较两字串大小, substring (str , position [,length ]) //从str的position开始,取length个字符, 注:mysql中处理字符串时,默认第一个字符下标为1,即参数position必须大于等于1

2日期函数

addtime (date2 ,time_interval ) //将time_interval加到date2 convert_tz (datetime2 ,fromtz ,totz ) //转换时区 current_date ( ) //当前日期 current_time ( ) //当前时间 current_timestamp ( ) //当前时间戳 date (datetime ) //返回datetime的日期部分 **date_add (date2 , interval d_value d_type )** //在date2中加上日期或时间 date_format (datetime ,formatcodes ) //使用formatcodes格式显示datetime date_sub (date2 , interval d_value d_type ) //在date2上减去一个时间 **datediff (date1 ,date2 ) //两个日期差** day (date ) //返回日期的天 dayname (date ) //英文星期 dayofweek (date ) //星期(1-7) ,1为星期天 dayofyear (date ) //一年中的第几天 extract (interval_name from date ) //从date中提取日期的指定部分 makedate (year ,day ) //给出年及年中的第几天,生成日期串 maketime (hour ,minute ,second ) //生成时间串 monthname (date ) //英文月份名 now ( ) //当前时间 sec_to_time (seconds ) //秒数转成时间 str_to_date (string ,format ) //字串转成时间,以format格式显示 timediff (datetime1 ,datetime2 ) //两个时间差 time_to_sec (time ) //时间转秒数] week (date_time [,start_of_week ]) //第几周 year (datetime ) //年份 dayofmonth(datetime) //月的第几天 hour(datetime) //小时 last_day(date) //date的月的最后日期 microsecond(datetime) //微秒 month(datetime) //月 

3 数字函数

abs (number2 ) //绝对值 bin (decimal_number ) //十进制转二进制 ceiling (number2 ) //向上取整 conv(number2,from_base,to_base) //进制转换 floor (number2 ) //向下取整 format (number,decimal_places ) //保留小数位数 hex (decimalnumber ) //转十六进制 注:hex()中可传入字符串,则返回其asc-11,如hex(‘def’)返回4142143 也可以传入十进制整数,返回其十六进制编码,如hex(25)返回19 least (number , number2 [,..]) //求最小值 mod (numerator ,denominator ) //求余 power (number ,power ) //求指数 rand([seed]) //随机数 round (number [,decimals ]) //四舍五入,decimals为小数位数]sqrt(number2) //开平方minute(datetime) //分返回符号,正负或0 

四、事务

事务指的是逻辑上的一组操作(多条sql语句),组成这组操作的各个单元要么全都成功,要么全都失败.

事务作用:保证在一个事务中多次操作要么全都成功,要么全都失败.

例如转账:

update account set money=money-100 where name=‘tom’;//tom转出100块

update account set money=money+100 where name=‘jerry’;//jerry收到100块

以上两条sql语句,很明显是一组语句,因为转账要么都成功要么都失败,不应该出现一方成功另一方失败的情况.那么我

1.ACID

  • 原子性:强调事务的不可分割.多条语句要么都成功,要么都失败。

  • 一致性:强调的是事务的执行的前后,数据要保持一致.

  • 隔离性:一个事务的执行不应该受到其他事务的干扰.

  • 持久性:事务一旦结束(提交/回滚)数据就持久保持到了数据库.

多个事务可现的情况: 脏读,幻读,不可以重复读。

上述情况的解决方法:设置事务的隔离级别

2.事务的隔离级别

数据库共定义了四种隔离级别:
Serializable:可避免脏读、不可重复读、虚读情况的发生。(串行化)
Repeatable read:可避免脏读、不可重复读情况的发生。(可重复读)(mysql默认)
Read committed:可避免脏读情况发生(读已提交)。
Read uncommitted:最低级别,以上情况均无法保证。(读未提交)

– 查询隔离级别
select @@tx_isolation;

– 设置隔离级别
set transaction isolation level Read uncommitted;

3.事务的操作

1、START TRANSACTION(或BEGIN):开始一个事务。所有在该语句之后执行的语句都将视为该事务的一部分。

2、COMMIT:提交事务。如果事务成功,则所有修改将成为永久性的。如果提交失败,则事务将回滚到其开始状态。

3、ROLLBACK:撤消事务中进行的所有修改,并将数据库恢复到事务开始时的状态。

BEGIN; – 开始事务

INSERT INTO clazz VALUES(NULL,336);
INSERT INTO clazz VALUES(NULL,388);

COMMIT;

直接用 set 来改变 mysql 的自动提交模式:

set autocommit=0 禁止自动提交

set autocommit=1 开启自动提交

五、索引

MySQL官方对索引的定义为:索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护者满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据, 这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。如下面的示意图所示 :

左边是数据表,一共有两列七条记录,最左边的是数据记录的物理地址(注意逻辑上相邻的记录在磁盘上也并不是一定物理相邻的)。为了加快Col2的查找,可以维护一个右边所示的二叉查找树,每个节点分别包含索引键值和一个指向对应数据记录物理地址的指针,这样就可以运用二叉查找快速获取到相应数据。

一般来说索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储在磁盘上。索引是数据库中用来提高性能的最常用的工具。

在这里插入图片描述

1.索引优势劣势

  • 优势

    1) 类似于书籍的目录索引,提高数据检索的效率,降低数据库的IO成本。

    2) 通过索引列对数据进行排序,降低数据排序的成本,降低CPU的消耗。

  • 劣势

    1) 实际上索引也是一张表,该表中保存了主键与索引字段,并指向实体类的记录,所以索引列也是要占用空间的。

    2) 虽然索引大大提高了查询效率,同时却也降低更新表的速度,如对表进行INSERT、UPDATE、DELETE。因为更新表时,MySQL 不仅要保存数据,还要保存一下索引文件每次更新添加了索引列的字段,都会调整因为更新所带来的键值变化后的索引信息。

2.索引分类

(1).普通索引

index :加速查找

(2).唯一索引

​ 主键索引:primary key :加速查找+约束(不为空且唯一)

​ 唯一索引:unique:加速查找+约束 (唯一)

(3).联合索引

-primary key(id,name):联合主键索引

-unique(id,name):联合唯一索引

-index(id,name):联合普通索引

(4).全文索引

fulltext :用于搜索很长一篇文章的时候,效果最好。

(5).空间索引

spatial :了解就好,几乎不用

注意:不同的存储引擎支持的索引类型也不一样

InnoDB 支持事务,支持行级别锁定,支持 B-tree、Full-text 等索引,不支持 Hash 索引;

MyISAM 不支持事务,支持表级别锁定,支持 B-tree、Full-text 等索引,不支持 Hash 索引;

Memory 不支持事务,支持表级别锁定,支持 B-tree、Hash 等索引,不支持 Full-text 索引;

NDB 支持事务,支持行级别锁定,支持 Hash 索引,不支持 B-tree、Full-text 等索引;

Archive 不支持事务,支持表级别锁定,不支持 B-tree、Hash、Full-text 等索引;

3.如何创建索引

https://www.cnblogs.com/wwqkrt/p/17420804.html

【什么聚集,什么非聚集】

六、数据库设计

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

E-R 图:

表里的一行数据: 实体

​ 表:实体的集合

关系型数据库: 表, 表的关系 (即实体与实体之间的关系)

在这里插入图片描述

ATM 机:转账, 存钱,取钱, 查询

实体(表): 名词:

​ ATM

属性:

  1. 需要存储的信息

    用户( 账号,密码,金额,用户基本 )

  2. 软件实现中需要的数据

用户( 账号,密码,金额,用户基本, 账号分类,创建日期,状态,登录ip )

关系 :

1.数据库设计步骤:

  1. 收集信息

  2. 找实体,名词,对象,实体

  3. 找属性(存储的数据,开发的需要添加的属性)

  4. 找实体与属性之间关系

  5. E-R 图(实体:矩形, 属性:椭圆,关系:菱形 , 连线:没有箭头)

  6. 编写数据字典(word文档,表,字段都进行记录)

  7. 画逻辑结构 图

  8. 画物理结构 图

  9. 生成相关的sql

    数据字典

    在这里插入图片描述

    逻辑结构图(power designer)

2.数据库设计规范(3NF)

第一范式:列不可再分,行不可重复 (拆列,创建主键)

第二范式:满足1NF, 表中的所有非主键列必须依赖于整个主键列。

第三范式:满足2NF,每一列数据都和主键直接相关,而不能间接相关

总结:

范式一列不可再分(值必须唯一),行不可重复(定义主键)

范式二非主键列必须依赖于主键列(非主依主)

范式三非主键列之间必须相互独立(非主独立)

3.常见数据库设计

外键设计

如果有外键这一列,但是可以插入非法数据,针对外键插入的数据进行约束

约束有两种方式,一种是我们可以通过java代码在业务上进行限定,另外一种是通过数据库的外键约束

外键约束不等于外键

传统项目一般会使用外键约束

互联网项目不会使用数据库的外键约束,外键约束性能太低(业务上进行限定)

多对多的表设计(商品与订单的关系)

多对多的表设计:首先新建一张中间表,中间表有两个外键,分别来至于对方表的主键,并且这两个外键要建立一个联合主键(或者使用自增列做为主键)。

在这里插入图片描述

自连接

在这里插入图片描述

自关联查询

– 查询一级分类

select id,name from category where parent_id is null

– 查询二级分类

select id,name from category where parent_id = 1

– 查询三级分类

select id,name from category where parent_id = 5

(员工表中,即有员工,又有上级编号,怎么查询出上级的姓名?)

– 创建员工表

CREATE TABLE emp (

​ id INT PRIMARY KEY AUTO_INCREMENT,

​ NAME VARCHAR(10),

​ gender CHAR(1), – 性别

​ salary DOUBLE, – 工资

​ join_date DATE, – 入职日期

​ dept_id INT,

​ FOREIGN KEY (dept_id) REFERENCES dept(id) – 外键,关联部门表(部门表的主键)

);

在这里插入图片描述

4.字典表设计

在这里插入图片描述

5.权限管理设计

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/202250.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【ArcGIS Pro微课1000例】0051:创建数据最小几何边界范围(点、线、面数据均可)

本实例为专栏系统文章:创建点数据最小几何边界(范围),配套案例数据,持续同步更新! 文章目录 一、工具介绍二、实战演练三、注意事项一、工具介绍 创建包含若干面的要素类,用以表示封闭单个输入要素或成组的输入要素指定的最小边界几何。 工具界面及参数如下所示: 核心…

什么是高防IP,高防IP该如何选择。

高防IP,指的是高防御能力的IP地址。在互联网的世界里,网络安全问题成为一个重要的话题。作为一个用户,你是否曾遇到过被黑客攻击造成的网站瘫痪、信息泄露等问题?如果你是一个企业,你是否考虑过自己公司的网站和业务的…

大模型在企业知识库场景的落地思考

一、引言 在这个信息爆炸的时代,企业的知识库已不再是简单的数据堆砌,而是需要智能化、高效率的知识管理和利用。大模型作为AI领域的一个重要突破,正逐步成为企业知识库管理的强大助力。通过前面一段时间对于大模型在企业落地的深入调研和实…

Nature medicine癌症大肠癌分子残留病及辅助化疗的疗效

今天给同学们分享一篇文章“Molecular residual disease and efficacy of adjuvant chemotherapy in patients with colorectal cancer”,这篇文章发表在Nat Med期刊上,影响因子为82.9。 结果解读: 患者特征 在ctDNA分析中包括的1,039名患者…

Qt6 QRibbon 一键美化Qt界面

强烈推荐一个 github 项目: https://github.com/gnibuoz/QRibbon 作用: 在几乎不修改任何你自己代码的情况下,一键美化你的 UI 界面。 代码环境:使用 VS2019 编译 Qt6 GUI 程序,继承 QMainWindow 窗口类 一、使用方法 …

MyBatis-Plus学习笔记(无脑cv即可)

1.MyBatis-Plus 1.1特性 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作强大的 CRUD 操作:内置通用 M…

深度学习技巧应用31-对卷积残差网络ResNet做知识蒸馏技术的实战应用,并加载真实数据集进行蒸馏训练

大家好,我是微学AI,今天给大家介绍一下深度学习技巧应用31-对卷积残差网络ResNet做知识蒸馏技术的实战应用,并加载真实数据集进行蒸馏训练。做模型压缩知识蒸馏是一种模型压缩技术,它通过将一个大模型(教师模型)的知识迁移到一个小模型(学生模型)中来实现模型的压缩。这…

[UIM]论文解读:subword Regularization: Multiple Subword Candidates

文章目录 一、完整代码二、论文解读2.1 介绍2.2 NMT2.3 Unigram language model2.4 subword 抽样2.5 效果 三、整体总结 论文:Subword Regularization: Improving Neural Network Translation Models with Multiple Subword Candidates 作者:Taku Kudo 时…

【教3妹学编程-算法题】购买水果需要的最少金币数

3妹:“你不是真正的快乐, 你的笑只是你穿的保护色” 2哥 : 3妹还在唱五月天的歌啊, 你不知道五月天假唱,现在全网都在骂呢。 3妹:知道啊,可是关我什么事,这个歌的确好听啊。 2哥 : 嗯嗯&#xf…

Avaya Aura Device Services 任意文件上传漏洞复现

0x01 产品简介 Avaya Aura Device Services是美国Avaya公司的一个应用软件。提供一个管理 Avaya 端点功能。 0x02 漏洞概述 Avaya Aura Device Services 系统PhoneBackup接口处存在任意文件上传漏洞,攻击者可绕过验证上传任意文件获取服务器权限。 0x03 影响范围…

Qt绘制直线箭头

一.使用QPainter绘制 满足条件: 任意角度直线都可绘制箭头所有箭头同样大小 void MainWindow::paintEvent(QPaintEvent*) {QPainter painter(this); // 创建QPainter对象,并指定绘制目标为当前的widgetQLineF line(50,20,500,500);double distanceFromEnd1 20;qre…

openGauss学习笔记-146 openGauss 数据库运维-备份与恢复-配置文件的备份与恢复

文章目录 openGauss学习笔记-146 openGauss 数据库运维-备份与恢复-配置文件的备份与恢复146.1 背景信息146.2 前置条件146.3 操作步骤146.4 示例 openGauss学习笔记-146 openGauss 数据库运维-备份与恢复-配置文件的备份与恢复 146.1 背景信息 在openGauss使用过程中&#x…

在编老师拒绝当班主任会怎样

作为一名在编老师,拒绝当班主任会怎样?这个问题其实有很多角度可以回答,因为不同的人可能会有不同的看法和经历。 从学校角度来说,拒绝当班主任可能会被视为缺乏责任感和担当精神。班主任是一个非常重要的职务,需要承担…

循环队列中的求队列长度公式怎么来的?【数学角度】

循环队列中的队列长度怎么来的? 引入 在一个循环队列中,队列的元素个数可以通过头指针(Front,通常用F表示)和尾指针(Rear,通常用R表示)来计算。假设队列的存储空间大小为n,队列中…

选择更好的Notes索引附件方式

大家好,才是真的好。 首先介绍最近产品更新消息。在上一周,HCL主要发布了以下几个产品更新:HCL Verse 3.2.0、HCL Volt MX Go 2.0.2、HCL Domino Rest API 1.0.8。 HCL Verse是今后Domino的产品当中主要使用的webmail功能,这一次…

kafka学习笔记--基础知识概述

本文内容来自尚硅谷B站公开教学视频,仅做个人总结、学习、复习使用,任何对此文章的引用,应当说明源出处为尚硅谷,不得用于商业用途。 如有侵权、联系速删 视频教程链接:【尚硅谷】Kafka3.x教程(从入门到调优…

国标GB28181设备注册安防监控平台EasyCVR不上线是什么原因?

安防视频监控EasyCVR平台兼容性强,可支持的接入协议众多,包括国标GB28181、RTSP/Onvif、RTMP,以及厂家的私有协议与SDK,如:海康ehome、海康sdk、大华sdk、宇视sdk、华为sdk、萤石云sdk、乐橙sdk等。平台能将接入的视频…

逆向爬虫进阶实战:突破反爬虫机制,实现数据抓取

文章目录 一、引言二、逆向爬虫进阶技巧三、逆向爬虫进阶实战代码片段四、总结与展望好书推荐内容简介作者简介前言节选 一、引言 随着网络技术的发展,网站为了保护自己的数据和资源,纷纷采用了各种反爬虫机制。然而,逆向爬虫技术的出现&…

控乐屋品牌|智汇恒星全宅智能空间万物互联,千亿蓝海蓄势待发

随着5G、大数据、云计算、物联网等技术的发展,智能化正覆盖人们生活的方方面面,全屋智能的出现为“一键式”智能家居生活享受提供无限可能。近年来智能家居行业总体规模增长迅速,数据显示,2022年中国智能家居行业市场规模约为6200…

Redis滚动分页的使用

Feed流 关注推送也叫Feed流。通过无限下拉刷新获取新的信息。 Feed流产品常见有两种模式: Timeline: 不做内容筛选,简单的按照内容发布时间排序,常用于好友或关注。例如朋友圈 优点:信息全面,不会有缺失。并且实现也…