JavaWeb后端数据库MySQL的使用

JavaWeb

    • MySQL
      • SQL
      • 数据库设计
    • 多表设计
      • 1对多
      • 1对1
      • 多对多
    • 多表查询
      • 连接查询
        • 内连接
        • 外连接
          • 左外连接
          • 右外连接
      • 子查询
      • 事务
      • 索引


MySQL

在这里插入图片描述

MySQL数据模型
关系型数据库:建立在关系模型基础上,由多张相互连接的二维表组成的数据库。

SQL

SQL:操作关系型数据库的编程语言

SQL语句通常分为4大类(我们主要学前面3个)
DDL:数据定义语言
DML:数据操作语言
DQL:数据查询语言
DCL:数据控制语言

数据库设计

DDL
数据库操作

表操作
创建

约束:作用于表中字段上的规则,用于限制表中的数据

DQL
基础查询
select 字段列表
from 表名列表

条件查询
where 条件列表

分组查询
group by 分组字段
having 分组之后的条件

排序查询
order by 排序字段列表

分页查询
limit 分页参数

多表设计

在进行数据库表设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在各种联系。

1对多

在数据库表中多的一方,添加字段,来关联1的一分的主键

1对1

在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的(UNIQUE)
在这里插入图片描述

多对多

建立第三张中间表,中间表至少包含两个外键,分别关联两方主键
在这里插入图片描述

案例:
在这里插入图片描述

多表查询

在做多表查询时,需要消除无效的笛卡尔积

连接查询

内连接
-- ============================= 内连接 ==========================
-- A. 查询员工的姓名 , 及所属的部门名称 (隐式内连接实现)
select tb_emp.name,tb_dept.name from tb_emp,tb_dept where tb_emp.dept_id = tb_dept.id;-- B. 查询员工的姓名 , 及所属的部门名称 (显式内连接实现)
select tb_emp.name,tb_dept.name from tb_emp inner join tb_dept on tb_emp.dept_id = tb_dept.id;
外连接
左外连接

查询左表所有数据(包含两表交集部分数据)

右外连接

查询右表所有数据(包含两表交集部分数据)

-- =============================== 外连接 ============================
-- A. 查询员工表 所有 员工的姓名, 和对应的部门名称 (左外连接)
select tb_emp.name,tb_dept.name from tb_emp left join tb_dept on tb_emp.dept_id = tb_dept.id;-- B. 查询部门表 所有 部门的名称, 和对应的员工名称 (右外连接)
select tb_emp.name,tb_dept.name from tb_emp right join tb_dept on tb_emp.dept_id = tb_dept.id;

子查询

-- 标量子查询
-- A. 查询 "教研部" 的所有员工信息
-- a.先查"教研部"的部门ID - tb_dept
select id from tb_dept where name = '教研部';
-- b.再查该部门ID下的员工信息
select * from tb_emp where dept_id = (select id from tb_dept where name = '教研部');-- 列子查询
-- A. 查询 "教研部" 和 "咨询部" 的所有员工信息
select id from tb_dept where name = '教研部' or name = '咨询部';
select * from tb_emp where dept_id in (select id from tb_dept where name = '教研部' or name = '咨询部');-- 行子查询
-- A. 查询与 "韦一笑" 的入职日期 及 职位都相同的员工信息 ;
select entrydate,job from tb_emp where name = '韦一笑';select * from tb_emp where (entrydate,job) = (select entrydate,job from tb_emp where name = '韦一笑');-- 表子查询
-- A. 查询入职日期是 "2006-01-01" 之后的员工信息 , 及其部门信息
select * from tb_emp where entrydate > '2006-01-01';select e.*,tb_dept.name from (select * from tb_emp where entrydate > '2006-01-01') e ,tb_dept where e.id = tb_dept.id;

事务

一组操作的集合。事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,及这些操作要么同时成功或者失败。

四大特征:
原子性、一致性、隔离性、持久性
在这里插入图片描述
在这里插入图片描述

-- ================================== 事务 ====================================
-- 开启事务
start transaction ;-- 删除部门
delete from tb_dept where id = 4;
-- 删除部门下的员工
delete from tb_emp where dept_id = 4;-- 提交事务
commit ;-- 上面如果有个操作失败,回滚事务
rollback ;select * from tb_dept;
select * from tb_emp;

索引

物理的对数据库表中一列或多列的值进行排序的一种存储结构,帮助数据库高效获取数据。
在这里插入图片描述

在这里插入图片描述

-- ================================== 索引 ====================================
-- 创建
create index idx_emp_name on tb_emp(name);-- 查询
show index from tb_emp;-- 删除
drop index idx_emp_name on tb_emp;

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

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

相关文章

【LeetCode刷题-链表】--86.分隔链表

86.分隔链表 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListNode next) { this.val val; this.next next; }* }*/ class…

孔明棋,(n + 2) x (m + 2)的棋盘,中间n x m的区域都是棋子,求最后最少剩余几个棋子

题目 #include <iostream> using namespace std; int f(int n, int m) {int t, res;if (n > m){t n;n m;m t;}if (n 1)res (m 1) / 2;else if (n 2){if (m % 3 0)res 2;elseres 1;}else if (n 3){res 2;}return res; } int change(int x) {x % 3;if (x 0…

sprintboot快速初始化【Springboot】

1.首先选择创建项目 2.填写对应的项目信息 一定要勾选maven&#xff0c;否则没有pom文件&#xff0c;选择next 3.选择应用场景 点击 create&#xff0c;DIEA就会根据你的选择自动创建项目骨架&#xff1b; 4.创建一个控制层 随便创建一个控制层&#xff0c;测试一下项目是否…

python实现C++简易自动压行

突发奇想&#xff0c;想要将自己的c压行之后交上去。但是苦于手动压行效率太低&#xff0c;在网上搜索压行网站没有找到&#xff0c;突然发现压行不就是检查检查去个换行符吗。于是心血来潮&#xff0c;用python实现了一个简易压行程序。 首先&#xff0c;宏定义等带#的文件不…

iconfont 使用彩色图标

1、下载iconfont到本地 2、全局安装 iconfont-tools npm install -g iconfont-tools 3、在iconfont解压目录下执行命令、一直回车 iconfont-tools 4、文件拷贝 执行完上述命令后会生成iconfont-weapp目录&#xff0c;将iconfont-weapp目录下的iconfont-weapp- icon.css文件…

ubuntu改window任务栏

经常在ubuntu和win之间切换&#xff0c;任务栏的布局不统一会让人很别扭&#xff0c;个人很喜欢win任务栏的不折叠图标功能&#xff0c;而ubuntu没有&#xff0c;又很喜欢的ubuntu的多工作空间&#xff0c;效率比副屏还高&#xff0c;还可以自定义切换工作空间的快捷键。鱼和熊…

成功的蓝图:实现长期成长与卓越表现的 6 项策略

能在收入和利润上持续领先同行的公司寥寥无几&#xff0c;不到四分之一。McKinsey的最新研究揭示了这些增长标杆公司与众不同的六大心态和策略。过度谨慎的公司&#xff0c;尤其在动荡时期&#xff0c;也许能捱过当下&#xff0c;但往往无法发掘全部潜力。考虑到近五年历经前所…

Ps:子路径的上下排列以及对齐与分布

不论是一个形状图层&#xff08;或图层的矢量蒙版&#xff09;上的多个形状还是同一路径层上多个路径&#xff0c;只要对应“路径”面板的一个路径层&#xff0c;可以将这些路径称为该路径层的“子路径”&#xff0c;也称为“组件”。 当一个路径层上有两个以上的子路径时&…

day64 django中间件的复习使用

django中间件 django中间件是django的门户 1.请求来的时候需要先经过中间件才能达到真正的django后端 2.响应走的时候也需要经过中间件 ​ djangp自带七个中间件MIDDLEWARE [django.middleware.security.SecurityMiddleware,django.contrib.sessions.middleware.SessionMiddle…

Python基础语法之学习运算符

Python基础语法之学习运算符 一、代码二、效果 一、代码 print("1 1 ", 1 1) print("1 - 1 ", 1 - 1) print("1 * 1 ", 1 * 1) print("11 / 5 ", 11 / 5) print("11 // 5 ", 11 // 5) print("9 % 5 ", 9…

pycharm右键执行,出现Run ‘Python tests in xxx‘的问题

1.问题描述 用pytest框架写了一个python的模块&#xff0c;右键执行时发现&#xff0c;执行的模块显示有问题&#xff0c;如下图所示 2.解决问题 Python tests这表示&#xff0c;当前运行的代码文件进入了pytest模式&#xff0c;pytest模式不同于run模式&#xff0c;因为运行…

Elasticsearch 线上实战问题及解决方案探讨

1、reindex相关问题 1.1 问题描述 我有 1tb 的一个大索引若干&#xff0c;要迁移到另外一个新集群去&#xff0c;有没有好办法&#xff1f;reindex好像会中断...... reindex 是不是就算设置了频率也会莫名的中断&#xff0c;而且没地方查到错误&#xff1f;1000多万的数据&…