初入数据库

SQL:操作关系型数据库的编程语言,定义了一套操作关系型数据库的统一标准。

DDL(Data Definition Language)数据定义语言

数据库

  • show databases;
  • create database db01;
  • use db01;
  • select database(); 显示当前使用的数据库
  • drop database db01; 删除数据库

  • 创建
    create table 表名(
    字段1 字段类型 [约束] [comment 字段注释]

    字段n 字段类型 [约束] [comment 字段注释]
    )[comment 表注释];
  • 约束:作用在表中字段上的规则,用于限制存储在表中的数据,目的:保证数据库中数据的正确性、有效性和完整性。
    在这里插入图片描述
  • 查询
    • show tables 查询当前数据库所有表
    • desc 表名 查询表结构
    • show create table 表名 查询建表语句
  • 修改
    alter
  • 删除
    drop table [if exists] 表名;
    删除表时,表中数据都会被删除

DML(Data Manipulation Language) 数据操作语言

添加数据INSERT

修改数据UPDATE

在这里插入图片描述如果没有添加where条件则代表更新所有行的对应字段。

删除数据DELETE

在这里插入图片描述
如果没有添加where条件则代表删除所有行的。
如果目的是要删除某个字段的值,无法使用delete可以使用UPDATE,将字段值更新为NULL。

DQL(Data Query Language) 数据查询语言

在这里插入图片描述

普通查询

在这里插入图片描述

条件查询

在这里插入图片描述

在这里插入图片描述

聚合函数

将一列数据作为一个整体,进行纵向计算。
select 聚合函数(字段列表) from 表名

在这里插入图片描述

count

count(字段):统计该字段非null值的个数
count(*):求行数

max

max(字段):找最大值

min

min(字段):找最小值

avg

avg(字段):求该字段所有值的平均值

sum

sum(字段):求该字段所有值的和

Tips:聚合函数只可以放在select后面

select name, price
from dish
where price < (select avg(price) from dish);

分组查询

group by :分组字段
having :条件筛选过滤
在这里插入图片描述分组查询中select可以查询的字段为分组字段和聚合函数

select gender from tb_emp group by gender;

select gender,count(*) from tb_emp group by gender;

在这里插入图片描述
若是分组过后的过滤要将条件放在having中

select job,count(*) from tb_emp where entrydate<='2015-01-01' group by job having count(*) >=2;

在这里插入图片描述
执行顺序: where->聚合函数->having

select c.name, count(*)
from dish d,category c
where d.category_id = c.idand d.status = 1
group by c.name
having count(*) >= 3;

先执行where消除多余笛卡尔积,之后根据group分类 计算出 count ,最后根据having 消除掉不符合条件的分组

where和having区别:

  • 执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。
  • 判断条件不同:where不能对聚合函数进行判断;而having可以对聚合函数进行判断。

排序查询

在这里插入图片描述
升序:ASC (默认) , 降序:DESC

嵌套排序

若一级排序值相同,根据二级排序继续比较

select * from tb_emp order by entrydate, update_time desc ;

分页查询

在这里插入图片描述
起始索引计算公式:( 页码 - 1 ) * 每页展示记录数

样例

-- 查询用户表:条件:姓名:某张某,性别:男,入职时间:2002-01-01  2015-01-01select *
from tb_emp
where name like '%张%'and gender = 1and entrydate between '2002-01-01' and '2015-01-01'
order by update_time desc
limit 0,10;

if判断式if(条件判断式,true取值,false取值),可以用于查询结果重命名

select if(gender = 1, '男性员工', '女性员工') 性别, count(*)
from tb_emp
group by gender;

'性别’是给字段进行重命名,省略了as
在这里插入图片描述在这里插入图片描述
case表达式case 表达式 when 值1 then 结果1 when 值2 then 结果2 .... else 结果n end

select (case job when 1 then '班主任' when 2 then '讲师' when 3 then '学工主管' when 4 then '教研主管' else '未分配' end) 职位,count(*)
from tb_emp
group by job;

在这里插入图片描述

多表设计

外键

在这里插入图片描述当一个字段中的取值被外部表作为外键关联时,这个字段的这个项无法删除

物理外键

使用foreign key 定义外键关联的另外一张表称为物理外键:影响增删改的效率(要检查外键关系);仅用于单节点数据库,不适用于分布式、集群场景;容易引发数据库的死锁问题,消耗性能。

逻辑外键

在业务层逻辑中,解决外键关联。通过逻辑外键,可以很方便解决上述问题。

表对应关系

一对多

eg:部门和员工
一的一方成为父表,多的一方称为子表
实现方式:在数据库中多的一方,添加字段,来关联一的一方的主键(外键)
如果一个表的一个字段是关联至另一个表的,则我们要进行外键处理,否则其实只是字段名相同而已,并无任何关系

一对一

eg:用户和身份证
多用于单表拆分,将一张表的基础字段放在一张表中,其他字段放在另一张表中,以提升效率。
实现:在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的(UNIQUE)

多对多

eg:学生和课程
实现方法:建立第三张表作为中间表,中间表至少包含两个外键,分别关联两方主键。

多表查询

查询时如果直接使用select * from 表1,表2,得到的结果为两个表的笛卡尔积。
所以我们要进行筛选,如加上where tb_emp.dept_id = tb_dept.id;

连接查询

内连接

相当于查询A,B交集部分的数据
在这里插入图片描述

隐式内连接
select 表1.name,表2.name from 表1 表2 where 表1.two_id = 表2.id;
显式内连接
select 表1.name,表2.name from 表1 inner join 表2 on 表1.two_id = 表2.id;

Tips:还可以进行表的重命名

select a.name b.name from 表1 a 表2 b where a.two_id = b.id;

外连接

在这里插入图片描述
连接条件就是外键等的连接关系,对结果的筛选(查询条件)就要通过where

select d.name, d.price, c.name
from dish dleft join category c on (d.category_id = c.id)
where d.price between 10 and 50and d.status = 1;
左外连接

查询左表所有数据(包括两张表交集部分数据)
完全包含表1的数据

右外连接

查询右表所有数据(包括两张表交集部分数据)
完全包含表2的数据

子查询

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

标量子查询

子查询返回的结果是单个值(数字、字符串、日期等),最简单的形式
常用操作符:= , <> , > ,>= , < , <=

select * from 表1 where two_id = (select id from 表2 where name = '教研部')

列子查询

子查询返回的结果是一列(可以是多行)
常用操作符:in 、not in 等

select * from 表1 where two_id in (select id from 表2 where name = '教研部' or name = '咨询部')

行子查询

子查询返回的结果是一行(可以是多列)
常用操作符:=、<>、in、not in

select * from 表1 where (entrydate, job) = (select entrydate, job from 表1 where name = '韦一笑');

注意(value1,value2)这种查询形式

表子查询

子查询返回的结果是多行多列,常作为临时表。
常用操作符:in

select e.*, d.name from(select * from 表1 where entrydate > '2016-01-01') e , 表2 d where e.two_id = d.id

将查询得到的临时表作为查询表,并且进行多表查询。

MySQL事务

我们在进行数据删除的时候,如果有两个表内有关联的数据,就需要先删除其中一个表,再删除另一个表内的数据,如果两步中有一步执行失败,则就会造成数据不一致的问题,由此我们需要通过事务来解决
事务:一组操作的集合,是不可分割的工作单位,事务会把所有操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。
Mysql默认一个DML语句是一个事务。所以我们如果要让多个DML语句组成一个事务就需要通过事务控制
在这里插入图片描述
在要组成的事务的DML语句组前加上开启事务,之后加上提交事务,这样就代表这些DML语句为同一个事务。如果失败了就可以用rollback,将修改的数据撤销。

四大特性

原子性:不可分割的最小单元,要么全部成功,要么全部失败。
一致性:事务完成时,必须使所有数据都保持一致状态。
隔离性:数据库提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。
持久性:事务一旦提交或回滚,对数据库的数据的改变就是永久的。

数据库优化

索引

帮助数据库高效获取数据的数据结构(可能为二叉搜索树这种,关于某个字段值的搜索树)
Tips:
主键默认有索引。
若字段上带有unique约束,则默认创建唯一索引

缺点:占用存储空间,增删改速度减慢
优点:查速度加快

结构

默认为B+树索引

语法

创建索引:create [unique] index 索引名 on 表名 (字段名,...);(unique表示唯一索引)(索引名命名规范:index_表名_字段名)
查看索引:show index from 表名;
删除索引:drop index 索引名 on 表名;

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

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

相关文章

Springboot的Test单元测试操作

Springboot的Test单元测试操作 简单总结需要操作的步骤 1&#xff0c;导入依赖 2&#xff0c;创建目录&#xff08;目录和启动类的目录保持一致&#xff09; 3&#xff0c;添加注解 4&#xff0c;写方法测试 1&#xff0c;导入依赖 <dependency><groupId>org.spri…

(八)小案例银行家应用程序-排序-数组排序

排序一直有很多的算法&#xff0c;今天我们仅仅来说JavaScript内置的排序方法 ● 字符串 const owners [Jonas, Zach, Adam, Martha]; console.log(owners.sort()); console.log(owners);但是注意&#xff0c;这个方法会改变原有的数组&#xff1b; ● 我们在试试数字 cons…

使用excel文件生成sql脚本

目录 1、excel文件脚本变量2、公式示例 前言&#xff1a;在系统使用初期有一些基础数据需要从excel中导入到数据库中&#xff0c;直接导入的话可能有些字段用不上&#xff0c;所以就弄一个excel生成sql的导入脚本&#xff0c;这样可以将需要的数据填到指定的列即可生成sql。 1、…

探索AI大模型在央国企的落地实践|爱分析活动

在这个人工智能技术迅猛发展的时代&#xff0c;AI大模型在央国企的落地实践正成为推动数字化转型和智能化升级的重要引擎。为了深入探讨AI大模型在央国企的应用场景、技术挑战与落地路径&#xff0c;爱分析邀请到一家头部互联网公司作为本次闭门研讨会的联合主办方&#xff0c;…

美国网站服务器解决方案

在当今互联网时代&#xff0c;网站是企业宣传、营销和销售的最好方式&#xff0c;因此&#xff0c;选择一个适合自己企业的网站服务器解决方案很重要。美国作为全球网络基础设施最发达的国家之一&#xff0c;其网站服务器解决方案具有以下特点&#xff1a; 一、安全性高 作为全…

IDEA使用中, 设置平展软件包。使用IDEA遇到的问题:src里为什么创建包为什么不在包里面

使用IDEA遇到的问题&#xff1a;src里为什么创建包为什么不在包里面 如下图所示 &#xff1a; 点击齿轮设置 如何搞回来&#xff1f; 看下面的Flatten Packages&#xff08;平展软件包&#xff09;取消掉。

【算法刷题 | 回溯思想 07】4.18(全排列、全排列 ||)

文章目录 11.全排列11.1题目11.2解法&#xff1a;回溯11.2.1回溯思路&#xff08;1&#xff09;函数返回值以及参数&#xff08;2&#xff09;函数返回值&#xff08;3&#xff09;遍历过程 11.2.2代码实现 12.全排列 ||12.1题目12.2解法&#xff1a;回溯12.2.1回溯思路12.2.3代…

【Redis 开发】缓存穿透解决

缓存穿透 缓存穿透缓存空对象布隆过滤缓存空对象实现其他缓解方式 缓存穿透 缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在&#xff0c;这样缓存就永远不会生效&#xff0c;这些请求都会打到数据库 常见的解决方案有两种&#xff1a; 缓存空对象&#xff0c;布隆过…

Postman - 设置变量

场景&#xff1a; 比如你接口都有权限&#xff0c;访问需要每调一个接口都手动放token的值&#xff0c;这个时候就可以搞个全局的变量&#xff0c;只设置一次就可以了 1、设置变量 Environments -> Globals - > 设置key 、value 2、使用变量 {{你得变量名-key}} 3…

redis中的缓存穿透问题

缓存穿透 缓存穿透问题&#xff1a; 一般请求来到后端&#xff0c;都是先从缓存中查找数据&#xff0c;如果缓存中找不到&#xff0c;才会去数据库中查询数据。 而缓存穿透就是基于这一点&#xff0c;不断发送请求查询不存在的数据&#xff0c;从而使数据库压力过大&#xff…

MySQL主从的应用

说明&#xff1a;本文介绍MySQL主从在实际中的应用。主从搭建和问题参考下面两篇文章&#xff1a; MySQL主从结构搭建 搭建MySQL主从结构时的问题 数据迁移 当我们搭建完MySQL主从&#xff0c;第一步当然是把历史数据导入到主从结构中。有以下两种方式&#xff1a; 开启主从…

CST Studio初级教程 一

本教程将详细介绍CST Studio Project创建。 新建Project 1. 点击New and Recent&#xff0c;然后点击New Template。 然后依据我们的仿真属类&#xff0c;在下图中做选择需要的模板。 如果做高频连接器信号完整性&#xff08;SI&#xff09;仿真&#xff0c;我们就选Microwaves…

数据结构之二叉搜索树底层实现洞若观火!

目录 题外话 正题 二叉搜索树 底层实现 二叉搜索树查找操作 查找操作思路 查找代码实现详解 二叉搜索树插入操作 插入操作思路 插入代码详解 二叉搜索树删除操作 删除操作思路 删除代码详解 小结 题外话 我的一切都是党给的,都是人民给的,都是家人们给的!! 十分感…

Docker的数据管理、网络通信和dockerfile

目录 一、Docker的数据管理 1. 数据卷 1.1 数据卷定义 1.2 数据卷配置 2. 数据卷容器 2.1 创建数据卷容器 2.2 使用--volume-from来挂载test1 二、端口映射 三、容器互联 1. 创建容器互联 ​编辑2. 进入test2测试&#xff08;ping 容器名/别名&#xff09; 四、Dock…

c++11详解

目录 1.列表初始化 2.声明 3.右值引用和移动语句 4. c11新的类功能 5. 可变参数模板 6.lambda表达式 7.包装器 8. 后言 1. 列表初始化 1.1 {}的初始化 (1) c98标准规定可以使用{}对数组以及结构体进行统一的列表初始化. struct Point {int _x;int _y; };int main() {in…

【Unity】shader中参数传递

1、前言 unity shader这个对于我来说是真的有点难&#xff0c;今天这篇文章主要还是总结下最近学习到的一些东西&#xff0c;避免过段时间忘记了&#xff0c;可能有不对&#xff0c;欢迎留言纠正。 2、参数传递的两种方式 2.1 语义传递 语义传递这个相对来说是简单的 shad…

数组模拟几种基本的数据结构

文章目录 数组模拟单链表数组模拟双链表数组实现栈数组模拟队列总结 数组模拟单链表 首先类比结构体存储单链表&#xff0c;我们需要一个存放下一个节点下标的数组&#xff0c;还需要一个存储当前节点的值的数组&#xff0c;其次就是一个int类型的索引&#xff0c;这个索引指向…

Python 实现视频去抖动技术

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 视频去抖动是视频处理中的一项重要技术&#xff0c;它可以有效地减少视频中由于相机震动或手…

嵌入式开发学习--进程、线程

什么是进程 进程和程序的区别 概念 程序&#xff1a;编译好的可执行文件&#xff0c;存放在磁盘上的指令和数据的有序集合&#xff08;文件&#xff09;&#xff0c;程序是静态的&#xff0c;没有任何执行的概念。 进程&#xff1a;一个独立的可调度的任务&#xff0c;执行一…

恶补《操作系统》3_1——王道学习笔记

3内存管理 3.1_1 内存的基础知识 1、什么是内存&#xff0c;作用 &#xff08;1&#xff09;内存&#xff1a;内存用来存放数据。程序执行前需要先放到内存中才能被CPU处理――缓和CPU与硬盘之间的速度矛盾。 &#xff08;2&#xff09;内存存储单元&#xff1a;每个地址对应…