【MySQL】阶段性总结

一、客户端和数据库操作

1.登录 mysql -uroot -p
2.查看数据库版本 show version();
3.查看现有数据库 show databases:
4.创建数据库

        create [if not exists] database 数据库名 character set 字符编码集 collate 排序规则;
5.选择数据库 use 数据库名;
6.查看当前选择了哪个数据库 select database();
7.删除数据库 drop [if exists] database 数据名:
8.查看警告信息 show warnings;
9. 退出 quit/exit

二、表操作

1.查看当前数据库中有哪些表 show tables;
2.创建一张新表 create table 表名(列表/字段名 数据类型[,列表/字段名 数据类型]...)
3.查看表结构 desc 表名;
4.删除表 drop 表名;//非常危险的操作


三、CRUD增删改查

1.新增-插入

        insert into 表名「(列名[,列名1...)1 values(值(,值]...);
指定了多少列名,就需要指定多少值,值与列名一一对应
不指定列名,值的顺序与个数和表中所有的列一一对应


2.查询操作

        a.全列查询 select * from 表名;//不加限制的查询会把表中所有的数据都査出来

        b.指定列査询 select 列名[,列名]... from 表名;// 推荐使用

        c.列为表达式的查询 select 列名/表达式 from 表名;

        d.别名查询 select 列名/表达式 [as] 别名 from 表名;//别名中如果包含空格,需要用单引号引起来

        e.去重查询 select distinct 列名[,列名]..from 表名;//如果列名有多个,去重时只有所有的列都相等,才会判定为重复,才会去重

        f. 排序 select 列名[, 列名]... from 表名 order by 列名 asc|desc; // asc升序 desc 降序

        g.条件査询

        select 列名[, 列名].. from 表名 where 列名/表达式 比较/逻辑运算符 order by 列名 ascldesc;

        h.区间査询 where 列名 between 开始条件 and 结束条件; // 等价于 开始条件<= 列的值 <= 结束条件

        i.模糊査询 select * from 表名 where 列名 like"%值";//% 匹配任意字符,_匹配单个字符

        j.分页查询

        select * from 表名 where 条件 order by 列名 asc|desc limit num; // 查询前num条记录
        select * from 表名 where 条件 order by列名 asc|desc limit start num;//从第start条开始,向后查num条

        select * from 表名 where 条件 order by 列名 asc|desc limit num offset start; //从第start条开始,向后查num条

四、更新

        update 表名 set 列名= 值 where 条件 order by 子句 limit num; //如果不指定条件和limil的数量就会更新整表
 

五、删除

        delete from 表名 where 条件 order by 子旬 limit num;//如果不指定条件和limit的数量就会删除整表中的数据
 

六、数据库约束

1.非空约束:NOT NULL 标记一个字段是否可以为空,指定了这个约束,字段就不能为空

2.唯一约束:UNIQUE 标记一个字段的内容在当前列中唯一,不能重复,但是可以为NULL

3.主键约束:PRIMARY KEY, 在约束的方式上相当于NOT NULL+ UNIQUE认

4.默念约束:DEFAULT 当一个字段没有指定值时(为NULL时),不指定列的值的时,就用默认值去填充该列

5.外键约束:FOREIGN KEY 一个表中的字段与另一个表中的主键建立关联关系,当对表中的数据进行增删改的时候数据库会帮我们进行检查

七、表的设计

三大范式

1.第一范式:

        要求表中的每一个列不可再分,有一个简单的方法,数据库中提供的数据类型可以描述这个字段不满足第一范式的数据库就不是关系型数据库
 

2.第二范式:

        在第一范式的基础上,消除部分函数依赖,只能出现在有复合主键的表中(多个候选键),如果有字段只依赖于复合主键中的某一个列,那么就需要把这个列剔除,单独建表
        不满足第二范式的情况下会出现一些数据异常
              
  数据冗余,更新异常,删除异常,新增异常
 

3.第三范式:

        在第二范式的基本上,消除传递依赖

八、关系模型

1.一对一关系:

        各自先建立各自的表,在其中一张表中加一个字段完成对另一张表的引用(建立关系)

2.一对多关系:

        各自先建立各自的表,在一这一方设置一个主键,在多这一方加一个字段,两表建立引用关系

3.多对多关系:

        各自先建立各自的表,另外新加一张关系
 

九、聚合函数

1.COUNT(列”); 统计结果的条数
2.SUM(列) 求和
3.AVG(列) 求平均值
4.MIN(列)最小值
5. MAX(列) 最大值

 

十、GROUP BY 分组查询

        对某一个字段进行分组操作,分组后

HAVING子句

        对GROUP BY 的结果进行过滤的

十一、联合查询(表连接查询)

1.内连接

        select *from table1,table2 where table1.xxx= table2.xxx
        select * from table1
join table2 on table1.xxx= table2.xxx;
        select * from table1
inner join table2 on table1.xxx= table2.xxx;
 

表连接的执行过程
1.先计算参与表连接的笛卡尔积
2.通过连接条件过滤无效数据
3.加入查询条件得到想要的结果行
4.精减列名得到最终想要查询的列

 

2.外连接,分为左外连接和右外连接

        select*from table1 left ioin table2 on table1 .xxx = table2.xxx:
        select * from table1 riaht ioin table2 on table1 .xxx= table2 .xxx
        左外连接以左表为基准,左边的表中所有的数据全部显示,右表中没有对应的记录用NULL去填充

        右外连接以右表为基准,右边的表中所有的数据全部显示,左表中没有对应的记录用NULL去填充

3. 自连接

        select * from table1 t1, table1 t2 where t1.xxx = t2.xxx;
        把行转换成列,在查询的时候可以使用WHERE 条件进行过滤,实现行与行之间的比较

4.子查询


        单行子查询:select *from table1 where id = (select id from table2 where clo = xxx);
        多行子查询:select * from table1 where id
IN (select id from table2 where clo = xxx)

  • 内层查询的结果做为外层查询的条件,把多条语句合并为一条执行
  • 子可询可以无限嵌套,层数据过多会影响效率
     

5.合井查询

        select * from table1 union select * from table2.
        select * from table1
union all select * from table2,
        作用是把两个结果集中合并成一个返回
        注意:合并查询时多个查询的查询列表必须匹配,MYSQL不对结果做校验,写的时候务必注意

6.一条SQL语句中各部分的执行顺序

        自己构造一条SQL,不一定可以执行成功,但是相关的关键字都包含
        select distinct id, name, avg(age) from student where class id = 1 join class on student.class id = class.id group by student.id having avg(age)>0 order by student.id asc limit 100;

FROM--> JOIN ON--> WHERE--> GROUP BY--> HAVING--> SELECT--> DISTINCT--> ORDRE BY-->.LIMIT

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

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

相关文章

Java通过calcite实时读取kafka中的数据

引入maven依赖 <dependency> <groupId>org.apache.calcite</groupId> <artifactId>calcite-kafka</artifactId> <version>1.28.0</version> </dependency> 测试代码 import java.sql.Connection; import java.sql.DriverMan…

RDIFramework.NET CS敏捷开发框架 V6.1发布(.NET6+、Framework双引擎、全网唯一)

RDIFramework.NET C/S敏捷开发框架V6.1版本迎来重大更新与调整&#xff0c;全面重新设计业务逻辑代码&#xff0c;代码量减少一半以上&#xff0c;开发更加高效。全系统引入全新字体图标&#xff0c;整个界面焕然一新。底层引入最易上手的ORM框架SqlSugar&#xff0c;让开发更加…

SQL(四) 游标实验、存储过程、函数实验

1.将视图实验中score表中的数据通过以下命令复制到新建的表score_copy中&#xff0c;然后通过带有游标的存储过程对成绩按下面的规则进行更新&#xff1a;80~100&#xff0c;更改为5&#xff1b;60~80&#xff0c;更改为3&#xff1b;低于60分更新为0。 Create table score_co…

TypeORM在Node.js中的高级应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 TypeORM在Node.js中的高级应用 TypeORM在Node.js中的高级应用 TypeORM在Node.js中的高级应用 引言 TypeORM 基本概念 1. 实体&am…

11.15组会汇报

概述 不经意传输协议,也叫茫然传输协议,是一种保护隐私的两方通信协议,消息发送者持有两条待发送的消息,接收者选择一条进行接收,事后发送者对接收者获取哪一条消息毫不知情,接收者对于未选择的消息也无法获取任何信息。即1-out-of-2 OT。在OT协议中,发送方拥有全部的数据权限,…

通过华为鲲鹏认证发行上市的集成平台产品推荐

华为鲲鹏认证是技术实力与品质的权威象征&#xff0c;代表着产品达到了高标准的要求。从技术层面看&#xff0c;认证确保产品与华为鲲鹏架构深度融合&#xff0c;能充分释放鲲鹏芯片的高性能、低功耗优势&#xff0c;为集成平台的高效运行提供强大动力。在安全方面&#xff0c;…

基于ARM+FPGA的电力通信管理机IEC61850规约通信机的实现

本章通过对比传统的通信管理机方案对需要支持多RS485端口的不足之处&#xff0c; 以及在进行海量数据处理时的性能瓶颈&#xff0c;本文使用Intel全新的Cyclone V SoC FPGA芯片&#xff0c;充分发挥FPGA的高速并行运算特性以及现场可配置优势&#xff0c;并且结合 ARM处理器的…

ASP.NET Core Webapi 返回数据的三种方式

ASP.NET Core为Web API控制器方法返回类型提供了如下几个选择&#xff1a; Specific type IActionResult ActionResult<T> 1. 返回指定类型&#xff08;Specific type&#xff09; 最简单的API会返回原生的或者复杂的数据类型&#xff08;比如&#xff0c;string 或者…

ROS机器视觉入门:从基础到人脸识别与目标检测

前言 从本文开始&#xff0c;我们将开始学习ROS机器视觉处理&#xff0c;刚开始先学习一部分外围的知识&#xff0c;为后续的人脸识别、目标跟踪和YOLOV5目标检测做准备工作。我采用的笔记本是联想拯救者游戏本&#xff0c;系统采用Ubuntu20.04&#xff0c;ROS采用noetic。 颜…

Bufferevent and evbuffer

每个bufferevent都有一个输入缓冲区和一个输出缓冲区&#xff0c;它们的类型都是“struct evbuffer”。有数据要写入到bufferevent时&#xff0c;添加数据到输出缓冲区&#xff1b;bufferevent中有数据供读取的时候&#xff0c;从输入缓冲区抽取&#xff08;drain&#xff09;数…

DQN代码详解

代码链接见文末 1. 任务描述 任务目标: 在 MountainCar-v0 环境中,智能体的目标是尽可能快地将一辆小车从山谷的一端(起始位置)驾驶到山谷的另一端(目标位置),通过学习如何利用环境中的动力学来实现目标。智能体只能施加力量(加速)来推动小车,且受到物理规律的限制…

pip/conda install bugs汇总

DNSResolutionError 一直不行&#xff0c;惯防火墙还是不行&#xff0c;可能导致漏洞了&#xff1b; 解决方案&#xff1a; reboot下次try可以刷新DNS缓存: resolvectl flush-cachespip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host‘mirrors.a…

主机型入侵检测系统(HIDS)——Elkeid在Centos7的保姆级安装部署教程

一、HIDS简介 主机型入侵检测系统(Host-based Intrusion Detection System 简称:HIDS);HIDS作为主机的监视器和分析器,主要是专注于主机系统内部(监视系统全部或部分的动态的行为以及整个系统的状态)。 HIDS使用传统的C/S架构,只需要在监测端安装agent即可,且使用用户…

Django启用国际化支持(2)—实现界面内切换语言:activate()

文章目录 ⭐注意⭐1. 配置项目全局设置&#xff1a;启用国际化2. 编写视图函数3. 配置路由4. 界面演示5、扩展自动识别并切换到当前语言设置语言并保存到Session设置语言并保存到 Cookie ⭐注意⭐ 以下操作依赖于 Django 项目的国际化支持。如果你不清楚如何启用国际化功能&am…

软件工程-需求分析与设计-更新中-1.0版

前言: 感觉书本上和线上课程, 讲的太抽象, 不好理解, 但软件开发不就是为了开发应用程序吗?! 干嘛搞这么抽象,对吧, 下面是个人对于软件开发的看法, 结合我的一些看法, 主打简单易懂, 当然,我一IT界小菜鸟, 对软件开发的认识也很浅显, 这个思维导图也仅仅是现阶段我的看…

Springboot之登录模块探索(含Token,验证码,网络安全等知识)

简介 登录模块很简单&#xff0c;前端发送账号密码的表单&#xff0c;后端接收验证后即可~ 淦&#xff01;可是我想多了&#xff0c;于是有了以下几个问题&#xff08;里面还包含网络安全问题&#xff09;&#xff1a; 1.登录时的验证码 2.自动登录的实现 3.怎么维护前后端…

Vue3 虚拟列表组件库 virtual-list-vue3 的使用

Vue3 虚拟列表组件库 virtual-list-vue3 的基本使用 分享个人写的一个基于 Vue3 的虚拟列表组件库&#xff0c;欢迎各位来进行使用与给予一些更好的建议&#x1f60a; 概述&#xff1a;该组件组件库用于提供虚拟化列表能力的组件&#xff0c;用于解决展示大量数据渲染时首屏渲…

http常⻅请求头和响应头详细讲解(笔记)

http常⻅请求头状态码 简介&#xff1a;讲解http常⻅见的请求⽅方法和使⽤用 http1.0定义了了三种&#xff1a;GET: 向服务器器获取资源&#xff0c;⽐比如常⻅见的查询请求POST: 向服务器器提交数据⽽而发送的请求Head: 和get类似&#xff0c;返回的响应中没有具体的内容&am…

(33)iptables设置防火墙策略常用命令(docker环境、非docker环境)

#普通环境&#xff08;非docker&#xff09; # 拒绝所有对端口 31001 的访问 iptables -A INPUT -p tcp --dport 31001 -j DROP # 允许 IP 地址 20.59.30.77 访问端口 31001 (此处用的是虚拟机 所以要使用nat地址的网关) iptables -I INPUT 1 -p tcp -s 20.59.30.77 --dpor…

【嵌入式】关于push老仓库到新仓库的方法

1. 背景 公司项目经常会有需要从开源项目中镜像代码过来的活,所以常常会在自己的服务器上创建一个对应的仓库,然后使用命令将期push过去。为方便日后抄命令,这里记录一下使用的命令。 2. 操作步骤 2.1. 已下载的代码push 特别提醒: 使用此脚本前请确保你修改的代码已保存…