JAVA全栈开发 day16_MySql01

一、数据库

1.数据储存在哪里?

硬盘、网盘、U盘、光盘、内存(临时存储)

数据持久化

使用文件来进行存储,数据库也是一种文件,像excel ,xml 这些都可以进行数据的存储,但大量数据操作,还是用数据库文件效率最高

2.什么是数据库

数据库就是存储数据的“仓库”

3.数据库的作用

1.存储大量的数据,访问和检索数据(管理数据)

2.保证数据的完整性

3.安全与共享

4.数据可以进行组合,产生新的数据(数据分析)

4.数据库的发展历史

  • 1.层次模型:单个记录以父子关系形成的树状结构树创建了一个层次状结构,在其中数据被分解为逻辑的分类和子类,使用记录代表逻辑数据单元。
    在这里插入图片描述

  • 2.网状模型:网状模型通过允许记录有多个父子关系,来增强层次模型

在这里插入图片描述

  • 3.关系模型:独立于应用程序的。更改数据库设计,而不会影响应用程序成为可能表的行和列这种结构,来替换父子框架。使用关系模型,我们可以克服早期模型的缺陷,在表之间定义复杂的关系。

  • 表(table) 是关系型数据库的核心单元,它是数据存储的地方

    术语:

    行: 记录,实体

    列:字段

在这里插入图片描述

  • 关系:(表与表之间的关系)

1对1   :一对一关系是比较少见的关系类型。很多数据库也很少包含一对一关系。

​                   A 表中的一行最多只能匹配于 B 表中的一行,反之亦然。

​                 人           身份证号

				 1                1

​ 			   	 1                1

-------------------------------------------

​                 1       :         1

1对多:   最常用的关系类型是一对多关系,通常把一对多关系中,“多边”的表称为从表,把“一边”的表称为主表。

​             人          银行卡

​             1               N

​             1               1 

-----------------------------------------------

​             1       :       N

多对多:

​          学生        老师

​            1               N

​            N               1

------------------------------------------------

​            N     :         N

  • 4.非关系模型(noSQL)

二、关系型数据库

关系型数据库有哪些?

Access ,Mysql (小型企业, 免费),Sql Server(微软 ,中企) , Oracle (大型) , DB2 , SyBase 等…

在这里插入图片描述

数据库(Database)

DBMS(Database Manage System)

RDBMS( Relation Database Manage System)

在这里插入图片描述

数据库是存储和管理数据的仓库,但数据库并不能直接存储数据,数据是存储在表中的。

在存储数据的过程中一定会用到数据库服务器,所谓的数据库服务器就是指在计算机上安装一个数据库管理程序。

在这里插入图片描述

1.常见数据库产品

在这里插入图片描述

2.关系与非关系数据库的对比

关系型数据库的优势:

1.复杂查询可以用SQL语句方便的在- -个表以及多个表之间做非常复杂的数据查询。

2.事务支持使得对于安全性能很高的数据访问要求得以实现。对于这两类数据库,对方的优势就是自己的弱势,反之亦然。

非关系型数据库的优势:

1.性能NOSQL是基于键值对的,可以想象成表中的主键和值的对应关系,而且不需要经过SQL层的解析,所以性能非常高

2.可扩展性同样也是因为基于键值对,数据之间没有耦合性,所以非常容易水平扩展。

3. MySQL数据库

发展史

2003年12月,MySQL 5.0版本发布

2008年1月,MySQL AB公司被Sun公司以10亿美金收购

2008年11月,MySQL 5.1发布.

2009年4月,Oracle公 司以74亿美元收购Sun公司

2010年12月,MySQL 5.5发布

详细内容:

1、MySQL的历史可以追溯到1979年,一个名为Monty Widenius的程序员在为TcX的小公司打工,并且用BASIC设计了一个报表工具,使其可以在4MHz主频和16KB内存的计算机上运行。当时,这只是一个很底层的且仅面向报表的存储引擎,名叫Unireg。

2、1990年,TcX公司的客户中开始有人要求为他的API提供SQL支持。Monty直接借助于mSQL的代码,将它集成到自己的存储引擎中。令人失望的是,效果并不太令人满意,决心自己重写一个SQL支持。

3、 1996年,MySQL 1.0发布,它只面向一小拨人,相当于内部发布。到了1996年10月,MySQL 3.11.1发布(MySQL没有2.x版本),最开始只提供Solaris下的二进制版本。一个月后,Linux版本出现了。在接下来的两年里,MySQL被依次移植到各个平台。

4、1999~2000年,MySQL AB公司在瑞典成立。Monty雇了几个人与Sleepycat合作,开发出了Berkeley DB引擎, 由于BDB支持事务处理,因此MySQL从此开始支持事务处理了。

5、2000,MySQL不仅公布自己的源代码,并采用GPL(GNU General Public License)许可协议,正式进入开源世界。同年4月,MySQL对旧的存储引擎ISAM进行了整理,将其命名为MyISAM。

6、2001年,集成Heikki Tuuri的存储引擎InnoDB,这个引擎不仅能持事务处理,并且支持行级锁。后来该引擎被证明是最为成功的MySQL事务存储引擎。MySQL与InnoDB的正式结合版本是4.0

7、2003年12月,MySQL 5.0版本发布,提供了视图、存储过程等功能。

8、2008年1月,MySQL AB公司被Sun公司以10亿美金收购,MySQL数据库进入Sun时代。在Sun时代,Sun公司对其进行了大量的推广、优化、Bug修复等工作。

9、2008年11月,MySQL 5.1发布,它提供了分区、事件管理,以及基于行的复制和基于磁盘的NDB集群系统,同时修复了大量的Bug。

10、2009年4月,Oracle公司以74亿美元收购Sun公司,自此MySQL数据库进入Oracle时代,而其第三方的存储引擎InnoDB早在2005年就被Oracle公司收购。

11、2010年12月,MySQL 5.5发布,其主要新特性包括半同步的复制及对SIGNAL/RESIGNAL的异常处理功能的支持,最重要的是InnoDB存储引擎终于变为当前MySQL的默认存储引擎。MySQL 5.5不是时隔两年后的一次简单的版本更新,而是加强了MySQL各个方面在企业级的特性。Oracle公司同时也承诺MySQL 5.5和未来版本仍是采用GPL授权的开源产品。

MySql 8.0 新版本。

一般使用的都是Mysql 5.x;

4.MySQL特点

安装简单,部署迅速,

适合大批量快速部署

易于扩展,扩展性能极佳

架构灵活,可以根据业务特点配置适合自己的MySQL集群

开源,可以根据自己的业务需求进行二次开发,

使用广泛,几乎所有的互联网公司都在使用MySQL数据库

对于OLTP业务,可以进行良好的支撑

5.Mysql的安装

图形界面用SqlYong

注: 10061错误码,检查你的服务是否启动

三、SQL:

SQL(Structured Query Language)语言是1974年由Boyce和Chamberlin提出的一种介于关系代数与关系演算之间的结构化查询语言,是一个通用的、功能极强的关系型数据库语言。

1.SQL语句

–数据定义语言(DDL):data definition language (定义数据库,定义表)

–数据查询语言(DQL): data query language (查询 数据)

–数据操作语言(DML): data manipulation language (操作数据)

–数据控制语言(DCL): data control language (用户控制 ,权限控制 )

岗位: DBA (database 管理员)

2.DDL 定义数据库及表

1. 创建数据库
   create database 数据库名;
   
2. 使用数据库
   use database 数据库名;
   
3. 删除数据库 
   drop database 数据库名;
   
   
 数据库命名规范:
 1. 标识符不能是所用RDBMS的保留字
 2. 不允许嵌入空格或其它特殊字符
 3. 第一个字符必须是下列字符之一:a-z 和 A-Z,下划线 (_)、at 符号 (@) 或者数字符号 (#)
 4. 后续字符可以是at符号(@)、美元符号 ($)、数字符号或下划线,字母。
 
 
 4. 创建表 (数据是放在表中)
   语法:
       create table 表名 (列名 列的数据类型  [列的约束] ,  ...)
       
       注: char , varchar 两个类型,需要设置长度,其它的类型都不需要设置
       
       
   方法2:复制表(只能复制表的数据与表字段,注:表的约束不能复制)
      CREATE TABLE student2 SELECT * FROM student
       
5. 删除表
     drop table 表名;
     
6. 修改表

	增加列
		alter table 表名 add 列名 数据类型
		
		ALTER TABLE student ADD address VARCHAR(100)
		
	删除列
		alter table 表名 drop 列名
		
	更改列
		alter table 表名 modify 列名 类型   --  只改列的类型 
		alter table 表名 change 旧列名 新列名 类型
		
	重命名表
		alter table 旧表名 rename 新表名

3.mysql中的数据类型

  1. 数字

    A- 整型 int 4字节

    B- 浮点 float 4字节 7位

    ​ double 8 字节 15位

    ​ decimal(总位数,小数点后的位数) decimal(M,D) 17字节, 30位小数

    注意:

    M为总位数,D为小数位,M必须大于D

  2. 字符串

    A- 固定长度字符串 char(长度)

    B- 可变长度字符串 varchar(最大的长度)

    C- 超长字符串 text

​ nchar , nvarchar , ntext 前面加n, 说明支持unicode编码,即可以显示中文

​ 一般不会去使用n开头的类型,为什么呢? 因为在创建数据库时,就已经指定了编码,支持中文显示

​ 3. 日期:

A: date 年月日 yyyy - MM - dd

B: datetime 年月日 时分秒 yyyy-MM-dd HH:mm:ss

扩展数据类型:

text : 存放超长文本

blob: 二进制

enum: 枚举

4.数据完整性分类

什么是数据的完整性?

完整性 = 准确性 + 可靠性

Q: 如何保证数据的完整性?

数据完整性(约束)的分类

–1.实体完整性 主键约束 、 唯一约束、 标识列

• 保证 一 行数据是有效的

主键约束 : primary key

唯一约束 : unique

标识列 : 系统给一个自增长的值,这个值不会重复,一般默认从1开始,每次加1(步长) auto_increment

–2. 域完整性 非空约束:Not Null 默认约束:Default(定义与实体时都用default)

• 保证 一 列数据是有效的

–3. 引用完整性 外键约束

• 保证引用的编号是有效的

–4.用户自定义完整性

• 保证自定义规则

5.DML** 数据操作语言

表的curd:

CURD 操作,即指对数据库中实体对象的增Create、改Update、查Read、删Delete操作。

增加数据 :

​ INSERT [INTO] 表名[(列名,…)] VALUES (值表达式,…)

– 注: 如果所有的列都要插入数据, 表名后面的列名可以省略

​ INSERT [INTO] 表名SET 列名=值表达式, …

​ INSERT [INTO] 表名1[(列名,…)] SELECT {*|列名,…} FROM表名2

​ – 上面这种方式添加数据,要求查询的列与插入的列,数量与数据类型要一致

注意:

在MySQL3.0.2 之后 into关键字在INSERT中是可以省略的,但是基于标准考虑建议大家在书写时保留该关键字

INSERT INTO student VALUES(NULL,'111',18,DEFAULT),
(NULL,'112',18,DEFAULT),
(NULL,'113',18,DEFAULT),
(NULL,'114',18,DEFAULT)

-- 插入多条数据

修改数据:

UPDATE 表名 SET 列名 = 更新后的值, [WHERE 条件子句]

删除数据:

方法1 :

DELETE FROM 表名 [WHERE 子句]

方法2:

TRUNCATE TABLE 表名

DELETE会记录日志,意味着删除后的数据还可以恢复,但是效率低。

TRUNCATE不会记录日志,删除后的数据不能恢复,但是效率高。TRUNCATE不能用于有外键约束引用的表 。

TRUNCATE 可以重置自增列, delete 不能重置自增列

TRUNCATE 只能删除整表,不能删除部分

DQL:

查询数据:

select * from 表名 – 所有列

select 列名, 列名2 … from 表名 – 所有列

预习 :

模糊查询

聚合函数

分组

表连接 join

四、作业

一、创建表

题目#创建student表

stu_id ‘学号’,

stu_name ‘姓名’,

stu_sex ‘性别’,

stu_age ‘年龄’,

stu_major ‘专业’,

stu_college ‘学院’

create table student (

​ stu_id bigint(11),

​ stu_name char(12),

​ stu_sex enum(‘男’,‘女’),

​ stu_age tinyint(255),

​ stu_major char(9),

​ stu_college char(12)

);

#创建course表

cs_id 课程编号,

cs_name ‘课程名称’,

cs_credit ‘课程学分’,

cs_type ‘课程类别’,

cs_depart ‘院系名称’

create table course(

​ cs_id int(11),

​ cs_name varchar(50),

​ cs_credit varchar(255),

​ cs_type char(12),

​ cs_depart char(6)

);

3、在表中插入数据记录

二、修改

1.修改年龄在18-22之间的学生,在原来年龄基础上减去2岁

// and 并且 or 或者

update student set stu_age = stu_age -2 where stu_age>=18 and stu_age<=22

2.修改编号为201804550107 的学生的专业改成大数据

uupdate 表名 set 专业 = ‘大数据 ’ where 编号 = ‘201804550107’

3.修改课程名为区块链 的学分为 3分

update 课程表 set 学分 = 3 where 课程名 = 区块链;

4.修改编号为7200422的名字为马克思列宁主义,院系名称为基础

update 课程表 set 名字 = 马克思列宁主义 , 院系名称= 基础 where 编号 = 7200422

5.修改名字为郭奎的学生的性别为女年龄比原来减少5岁

update 学生 set 性别=女 , age = age - 5 where 姓名 = 郭奎

三、查询

1.查询全部课程的信息。

select * from 课程表

2.查询信工学院开设的课程名、课程号及学分。

select 课程名,课程号,学分 from 课程 where 开课单位 = 信工学院

3.查询学分超过3学分的课程代码、课程名和开课单位。

select 课程代码,课程名,开课单位 from 课程 where 学分>3

4.查询计科专业和大数据专业的学生信息。

select * from 学生表 where 专业 = 计科专业 or 专业 = 大数据专业

5.查询不是信工学院的学生姓名和学号。

select 姓名,学号 from 学生表 where 学院 != ‘信工学院’

6.查询年龄是17,18,19的学生姓名和专业。

select 姓名,专业 from 学生表 where 年龄 = 17 or 年龄 = 18 or 年龄 = 19

select 姓名,专业 from 学生表 where 年龄 in (17,18,19);

7.查询学分在2到4之间课程的信息。

select * from 课程 where 学分 >= 2 and 学分<=4

// between 开始值 and 结束值

select * from 课程 where 学分 between 2 and 4

8.查询课程名称中带“数据”的课程名、课程号及开课单位。

// 模糊查询 - 》 mysql 模糊查询

select 课程名,课程号,开课单位 from 课程 where 课程名称 like ‘%数据%’

select 课程名,课程号,开课单位 from 课程 where 课程名称 包含 数据

9.查询信工学院的的专业有哪些。

select 去重复 专业 from 学生 where 学院 = 信工学院

select distinct 专业 from 学生 where 学院 = 信工学院

10.查询年龄为空的学生信息。

select * from 学生 where 年龄为空

select * from 学生 where 年龄 is null

11.查询不是信工学院开设的集中实践课的开课单位和课程名称。

select 开课单位, 课程名称 from 课程表 where 开课单位 != 信工学院 and 类型 =集中实践课

12.查询信工学院开设的课程的类型有哪些。

select * from 课程 where 开课单位 = 信工学院

13.查询学生的信息,查询结果按姓名升序排序。

select * from 学生 order by 姓名 asc

四、删除

1.删除所有学分低于2分的课程并且是文法学院的数据

2.删除id为29299131的课程

3.删除计算机导论并且学分为7分并且是基础学院的数据

4.删除编号为5223113,5243112,52235112,522112 的课程信息( or / in )

5.删除没有性别或者没有名字的学生的信息

delete from student where 性别 is null or 姓名 is null

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【开源】基于JAVA的校园电商物流云平台

项目编号&#xff1a; S 034 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S034&#xff0c;文末获取源码。} 项目编号&#xff1a;S034&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 商品数据模块2.3 快…

【开源】基于JAVA的考研专业课程管理系统

项目编号&#xff1a; S 035 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S035&#xff0c;文末获取源码。} 项目编号&#xff1a;S035&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 考研高校模块2.3 高…

【C++11/线程相关】thread类编写多线程、mutex互斥锁和lock_guard、atomic原子类型

目录 通过thread类编写C多线程程序线程间互斥——mutex互斥锁和lock_guardmutex互斥锁lock_guard 线程间通信C11实现生产者与消费者模型 基于CAS操作的atomic原子类型 橙色 通过thread类编写C多线程程序 为什么结果没有子线程中所打印的字符串呢&#xff1f;因为通过detach进…

STM32串口通信初探:使用HAL库实现基本功能

在本文中&#xff0c;我们将探索如何使用STM32的HAL库来实现串口通信的基本功能。串口通信是一种常见的外设通信方式&#xff0c;用于在微控制器和其他外部设备之间进行数据传输。在STM32系列微控制器中&#xff0c;HAL库提供了简单且灵活的方法来实现串口通信。我们将重点讨论…

【模电】直流通路与交流通路

直流通路与交流通路 通常&#xff0c;在放大电路中&#xff0c;直流电源的作用和交流信号的作用总是共存的&#xff0c;即静态电流、电压和动态电流、电压总是共存的。但是由于电容、电感等电抗元件的存在&#xff0c;直流量所流经的通路与交流信号所流经的通路不完全相同。因此…

MySQL的多表查询

多表关系 一对多(多对一)-> 多对多-> 一对一-> 概述 概述 多表查询分类 内连接 代码演示--> -- 内连接演示 -- 1.查询每一个员工的姓名&#xff0c;及关联的部门的名称(隐式内连接实现) select emp.name, dept.name from emp,dept where emp.dept_id dept.id; …

STM32F407-14.3.11-01互补输出和死区插入

互补输出和死区插入 高级控制定时器&#xff08;TIM1 和 TIM8&#xff09;可以输出两路互补信号&#xff0c;并管理输出的关断与接通瞬间。 这段时间通常称为死区&#xff0c;用户必须根据与输出相连接的器件及其特性&#xff08;电平转换器的固有延迟、开关器件产生的延迟...&…

java项目日常运维需要的文档资料

一、前言 java项目开发完成&#xff0c;部署上线&#xff0c;进入项目运维阶段&#xff0c;日常工作需要准备哪些资料和文档?当项目上线后&#xff0c;运行一段时间&#xff0c;或多或少会遇到一些运维上的问题&#xff0c;比如服务器磁盘饱满&#xff0c;服务器CPU&#xff0…

根文件系统初步测试

一. 简介 上一篇文章学习了向所编译生成的根文件系统中加入 lib库文件。文章地址如下&#xff1a; 根文件系统lib库添加与初步测试-CSDN博客 本文继上一篇文章的学习&#xff0c;本文对之前制作的根文件系统进行一次初步测试。 二. 根文件系统初步测试 为了方便测试&#…

如何使用 Docker 安装 Node-RED

安装 Node-RED 使用 Docker 是一种简便的方式&#xff0c;以下是基本的步骤&#xff1a; 安装 Docker&#xff1a; 确保已在系统上安装 Docker。可从 Docker 官方网站 或 Windows Docker 安装教程 获取安装指南。 拉取运行 Node-RED 镜像&#xff1a; 打开终端或命令行界面&am…

企业架构LB-服务器的负载均衡之Haproxy实现

企业架构LB-服务器的负载均衡之HAProxy实现 学习目标和内容 1、能够通过HAProxy实现负载均衡 ###1、介绍 Introduction HAProxy, which stands for High Availability Proxy, is a popular opensource software TCP/HTTP LoadBalancer and proxying solution which can be ru…

​ 华大基因发布《2023年全球地中海贫血认知现状报告》

在地中海沿岸地区、非洲、中东、东南亚和中国南部&#xff0c;一种名为地中海贫血&#xff08;以下简称“地贫”&#xff09;的遗传性血红蛋白疾病十分高发&#xff0c;已成为严重危害公共健康和社会稳定的重大问题。近日&#xff0c;华大基因发布《2023年全球地中海贫血认知现…

pip命令详解

pip命令介绍 pip是由Ian Bicking在2008年提出的&#xff0c;他将pyinstall重命名为pip。名称pip是首字母缩写词&#xff0c;全称为“Package Installer for Python”。自Python3的3.4版本以及Python2的2.7.9版本开始&#xff0c;pip被直接包括在Python的安装包内&#xff0c;成…

二叉树(判断是否为平衡二叉树)

题目&#xff08;力扣&#xff09;&#xff1a; 观察题目&#xff0c;发现最重要的条件就是&#xff0c;两颗子树的高度差的绝对值不超过1&#xff0c;我们就可以用递归将所有左子树和右子树都遍历一个&#xff0c;求出他们的高度差&#xff0c;若差值 > 1&#xff0c;则返回…

分布式搜索引擎elasticsearch(一)

5.1 初始elasticsearch elasticsearch是一款非常强大的开源搜索引擎,可以帮助我们从海量数据中快速找到需要的内容。 elasticsearch是elastic stack的核心,负责存储、搜索、分析数据。 5.1.1正向索引 5.1.2elasticsearch采用倒排索引: 文档(document):每条数据就是一个…

ONLYOFFICE 协作空间 2.0 现已发布:新增公共房间、插件、重新分配数据、RTL 界面等功能

更新后的 ONLYOFFICE 协作空间新增诸多实用功能&#xff0c;全平台实现多项优化功能。请继续阅读&#xff0c;了解所有更新。 ONLYOFFICE 协作空间是什么 ONLYOFFICE 协作空间是一款开源效率平台&#xff0c;让您与同事、团队成员、客户、合作伙伴、承包商、赞助商和其他第三方…

PyQt6 QListWidget列表控件

​锋哥原创的PyQt6视频教程&#xff1a; 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计35条视频&#xff0c;包括&#xff1a;2024版 PyQt6 Python桌面开发 视频教程(无废话…

主题色变量和var实现多套主题换肤

文章目录 一、前言1.1、[VueElementUI实现多套主题换肤](https://blog.csdn.net/u012804440/article/details/133975511)1.2、[VueElementUI实现在线动态换肤](https://blog.csdn.net/u012804440/article/details/133975570) 二、实现2.1、多主题色定义2.2、根节点属性修改2.2.…

【未解决】huggingface模型文件下载地址为什么会变?

问题描述 上次我们已经分析了huggingface加载模型时候的文件目录应该是怎么样的&#xff1f;&#xff08;感兴趣的可以主页搜索“【经验分享】huggingface模型加载过程下载到cache文件目录具体是怎么组织的&#xff1f;以及都会有什么文件目录&#xff0c;每个文件目录是什么&a…

2022年全国大学生数据分析大赛医药电商销售数据分析求解全过程论文及程序

2022年全国大学生数据分析大赛 医药电商销售数据分析 原题再现&#xff1a; 问题背景   20 世纪 90 年代是电子数据交换时代&#xff0c;中国电子商务开始起步并初见雏形&#xff0c;随后 Web 技术爆炸式成长使电子商务处于蓬勃发展阶段&#xff0c;目前互联网信息碎片化以…