mysql加强小结 203446

news2024/11/24 8:53:09

数据库三范式:

什么是范式

规则:想要设计一个好的关系,必须要满足一定的约束条件,有几个等级,一级比一级高

​ 解决什么问题:让数据库设计更加简洁,结构更加清晰,否则容易造成数据冗余

数据库有哪些范式?

​ 数据库有七大范式,常用的只有三个范式

**第一范式:**业务上属性不需要再分

**第二范式:**必须基于第一范式,非主属性都要全部主属性全部唯一确定,不可以由部分主属性就可以确定

​ 主属性:表示唯一,可以有多个,不是主键的意思

​ 非主属性:不是主属性的其他属性就是非主属性,也可以有多个

**不满足第二范式出现的问题:**数据冗余,表的设计可以如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YzAV3Wfj-1684934257937)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230427095701518.png)]

企业级应用:用户表,角色表,权限表,角色权限中间表

第三范式::基于第二范式,非主属性都要由主属性才能唯一确认,不可以出现另一个或者另一些非主属性可以确认的情况(要求一个数据库表中不包含已在其他表中已包含的非主属性)

sql分类

1.DQL:查询语言

2.DDL:建库语言

3.DML:增删改

4.TCL:事务处理语言

​ set autocommit=0:非自动提交

​ set autocommit=1:自动提交

​ start transcation:表示开启事务–可以执行多条sql语句

​ commit:提交

​ rollback:回滚事务

5.DCL:数据库控制语言

​ mysql数据库自带一个user表

​ ` host:表示访问当前数据库的ip地址,指定哪些ip可以访问

​ user:表示用户名

​ user@localhost

分配一个账号:

​ 创建一个用户:create user ‘用户名’@‘ip’ identified by ‘密码’

​ 首次创建一个账号之后,可以进行登录,有两个数据库,有一个测试库可以执行任何操作,不能看其他的数据库

给账号授权:

​ grant 权限列表 on 数据库名称.表 to ‘账号’@‘ip’

​ 权限列表:有多个权限使用 “,” 进行分割

撤销权限

​ revoke 权限列表 on 数据库名称.表名 from ‘账号’@‘ip’

在linux服务器上更新权限之后,需要重新重启mysql或者执行flush privileges;

单表查询

distinct(消除重复记录)

过滤查询

1.字符串和日期使用单引号括起来

2.字符串可以使用binary关键字规定字符串大小写

空值:

不表示0或者空字符串

任意类型都可以支持空值

包括空值的任何算数表达式等于空

使用函数 **IFNULL(expr1,expr2)**对null值进行处理,例;ifnull(emp,0)

逻辑运算符

优先级规则:比较运算符>not>and>or

结果排序

asc:升序

desc:降序

order by:字句在select语句后面执行

order by不能使用引号的别名进行排序,无效果

多表查询

使用原因:查询的数据分散在多张表中,只能使用多表查询

隐式内连接:

select  [distinct] * |字段名  from1,2...  where  条件  order  by   排序字段  asc|desc

**注意:**当多个表的字段重名的时候,必须在列的名字前加上表名做为前缀,否则不能识别是哪一个表的字段

显示内连接(使用 join on):

SELECT table1.column, table2.column
FROM table1 [INNER] JOIN table2 ON table1.column1 =table2.column2 WHERE 条件

内连接弊端:不能查询不满足条件的数据

外连接作用:将两张表不匹配的数据使用null进行填充

左外连接(以左表为主 left join on):

select table1.colum,table2.cilum from table1 left join table2  on table1.colum=table2.colum;

右外连接(以右表为主 right join on):

SELECT table1.column, table2.column
FROM table1 [INNER] JOIN table2 ON table1.column1 = table2.column2
WHERE 条件

多行函数

count():求数据个数,里面可以写*,1等,与写的东西无关,

avg():求平均值

max():求最大值

min():求最小值

sum():求和

注:不能再where中使用分组函数

分组查询(group by)

语法

SELECT [DISTINCT] *|分组字段1 [别名] [, 分组字段2 [别名] ,] | 统计函数
FROM 表名称 [别名], [表名称 [别名] ,]
[WHERE 条件(s)]
[GROUP BY 分组字段1 [, 分组字段2 ,]]

having分组限定:

不能在where字句中使用统计函数,having字句可以使用统计函数

select deptno,avg(sal) from emp group by deptno having avg(sal)>2000;

注意:

1.在group中出现的字段,可以不出现在select列表中

2.使用group by多列分组的时候,结果会按照分组字段的顺序进行排序显示

子查询

一个 查询之中嵌套了若干个其他的查询

子查询可以放到where之后:

select * from table where expr=(select expr from table
)

子查询在输出列表中;

SELECT dept_name, (SELECT COUNT(*) FROM employee WHERE employee.dept_id = department.dept_id) AS employee_count 
FROM department;

子查询放在from后面:

SELECT department.dept_name, AVG(employee.salary) AS avg_salary
FROM (
  SELECT employee.employee_id
FROM employee INNER JOIN department ON employee.department_id=department.department_id
) AS employee
GROUP BY department.department_id;

in里面可以是一个表达式,不仅仅是一个个值

SELECT firstname, lastname FROM employees WHERE salary IN (SELECT MAX(salary) FROM employees);

单行单列:

where中返回的结果只有一行数据

SELECT * FROM emp WHERE sal > (SELECT sal FROM emp WHERE ename = 'MARTIN')

多行单列:

where中返回的结果有多行或者零行

  • IN:与列表中的任意一个值相等
  • ANY:与子查询返回的任意一个值比较
  • =ANY:此时和 IN 操作符相同
  • >ANY:大于子查询中最小的数据
  • <ANY:小于子查询中最大的数据
  • ALL:与子查询返回的每一个值比较
  • >ALL:大于子查询中最大的数据
  • <ALL:小于子查询中最小的数据
select * from emp where sal >any(select sal from emp where sal>2957);

查询满足工资大于(查询结果大于2957)的员工所有信息

多行多列;

子查询的结果是多行多列,一般将子查询返回的结果当一个临时表,此时必须设置一个临时表

于子查询中最大的数据

  • ALL:与子查询返回的每一个值比较
  • >ALL:大于子查询中最大的数据
  • <ALL:小于子查询中最小的数据
select * from emp where sal >any(select sal from emp where sal>2957);

查询满足工资大于(查询结果大于2957)的员工所有信息

多行多列;

子查询的结果是多行多列,一般将子查询返回的结果当一个临时表,此时必须设置一个临时表

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

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

相关文章

电磁兼容(EMC)基础(二)

目录 1.1 什么是电磁兼容&#xff08;EMC&#xff09; 1.2 各种各样的“干扰” 1.3 电磁兼容三要素 1.4 什么是分贝 1.5 天线 1.1 什么是电磁兼容&#xff08;EMC&#xff09; 电磁兼容(Electro Magnetic Compatibility&#xff0c;EMC)是电子、电气设备或系统的一种重要…

面试题基础篇

文章目录 1、二分查找2、冒泡排序3、选择排序4、插入排序5、希尔排序6、快速排序7、ArrayList8、Iterator9、LinkedList10、HashMap10.1、基本数据结构底层数据结构&#xff0c;1.7和1.8有什么不同&#xff1f; 10.2、树化与退化为何要用红黑树&#xff0c;为何一上来不树化&am…

【开放原子训练营(第三季)inBuilder低代码开发实验室学习心得】

今天要给大家介绍的项目是UBML 什么是UBML呢&#xff1f; UBML&#xff08;统一业务建模语言 Unified-Business-Modeling-Language&#xff09;是一种用于快速构建应用软件的低代码开发建模语言&#xff0c;是开放原子开源基金会&#xff08;OpenAtom Foundation&#xff09;…

数据结构与算法:树形查找

一.二叉排序树&#xff08;BST&#xff09; 1.个人理解 左子树结点值 < 根结点值 < 右子树结点值对二叉排序树进行中序遍历&#xff0c;可以得到一个递增的有序数列 2.二叉树查找 原理&#xff1a; 对于一个给定的二叉排序树&#xff0c;如果要查找一个节点&#xff0…

并发知识杂谈

在JAVA语言层面&#xff0c;怎么保证线程安全&#xff1f; 有序性&#xff1a;使用happens-before原则 可见性&#xff1a;可以使用 volatile 关键字来保证&#xff0c;不仅如此&#xff0c;volatile 还能起到禁止指令重排的作用&#xff1b;另外&#xff0c; synchronized 和…

进程和编码

一、python代码的运行方式 1.脚本式 2. 交互式 一般用于代码的测试 二、进制及相互之间的转换 1. 进制 2.进制之间相互转换 在python中&#xff0c;十进制是以整形的形式存在&#xff0c;其他进制是已字符串的形式存在。 二进制/八进制/十六进制都可与十进制相互转换。但…

走向编程大师之路的几个里程碑

走向编程大师之路的几个里程碑 1语言关 2算法关 3系统关 4 编译器关 如下的系统的核心代码都有一万行以上&#xff0c;是规模和复杂度足够 大&#xff0c;可以检验开发者的模块化编程能力&#xff0c;掌控复杂度的能力。 使用什么编程语言本身是不重要的&#xff0c;能够有能…

常用消息中间件简介

一、 分布式系统消息通信技术简介 分布式系统消息通信技术主要包括以下几种&#xff1a; 1. RPC(Remote Procedure Call Protocol). 一般是C/S方式&#xff0c;同步的&#xff0c;跨语言跨平台&#xff0c;面向过程 2. CORBA(Common Object Request Broker Architecture). CO…

一个命令搞定Linux大文件下载

问题 Linux下log日志太大了&#xff0c;下载太慢了&#xff0c;即使下载下来&#xff0c;打开也费劲&#xff0c;咋办&#xff1f;将某文件夹打包成xx.tar.gz包&#xff0c;但依然很大&#xff0c;公司无法下载这么大的压缩包&#xff0c;咋办&#xff1f; split 以上2个问题…

[golang gin框架] 37.ElasticSearch 全文搜索引擎的使用

一.全文搜索引擎 ElasticSearch 的介绍&#xff0c;以 及安装配置前的准备工作 介绍 ElasticSearch 是一个基于 Lucene 的 搜索服务器,它提供了一个 分布式多用户能力的 全文搜索引擎&#xff0c;基于 RESTful web 接口,Elasticsearch 是用 Java 开发的&#xff0c;并作为 Apac…

PIC18F26单片机波特率配置

只需要配置以下三个寄存器&#xff1a; BRGCON1 BRGCON2 BRGCON3 BRGCON10x07; > 0000 0111 BRGCON20x90; > 1001 0000 BRGCON30x42; > 0101 0010 BRGCON1&#xff1a; Sync_Sog (bit7~bit6)1TQ,BRP(bit5~bit0)1 &#xff0c;则TQ((2*(BRP1))/Fosc16/32M&am…

Mysql存储时间,对应Api及对应的java属性

1.Mysql存储时间的类型 常用的储存时间/日期的类型&#xff1a; DATE&#xff1a;仅用于存储日期值&#xff08;年、月、日&#xff09;&#xff0c;格式为YYYY-MM-DD。TIME&#xff1a;仅用于存储时间值&#xff08;小时、分钟、秒&#xff09;&#xff0c;格式为HH:MM:SS。DA…

朴素贝叶斯算法实现英文文本分类

目录 1. 作者介绍2. 朴素贝叶斯算法简介及案例2.1朴素贝叶斯算法简介2.2文本分类器2.3对新闻文本进行文本分类 3. Python 代码实现3.1文本分类器3.2 新闻文本分类 参考&#xff08;可供参考的链接和引用文献&#xff09; 1. 作者介绍 梁有成&#xff0c;男&#xff0c;西安工程…

【UE】连续射击Niagara特效

效果 步骤 1. 新建一个粒子系统 选择“来自所选发射器的新系统” 添加“Fountain” 2. 打开这个新建的粒子系统 选中“Initialize Particle”模块&#xff0c;将颜色设置为&#xff08;100,0,0&#xff09; 再让生成的粒子大一些 选中“Spawn Rate”模块&#xff0c;将粒子的…

如何编写接口自动化框架系列之unittest测试框架的详解(二)

在编写自动化框架过程中 &#xff0c;我们首先想到的就是选择一个合适的测试框架 &#xff0c;目前常用的测试框架有unittest和pytest , unittest比较简单&#xff0c;适合入门着学习 &#xff1b;而pytest比较强大&#xff0c;适合后期进阶 。本文主要介绍的就是unittest框架 …

pytorch笔记(十)Batch Normalization

环境 python 3.9numpy 1.24.1pytorch 2.0.0+cu117一、Batch Normalize 作用 加快收敛、提升精度:对输入进行归一化,从而使得优化更加容易减少过拟合:可以减少方差的偏移可以使得神经网络使用更高的学习率:BN 使得神经网络更加稳定,从而可以使用更大的学习率,加速训练过程…

Chapter5: SpringBoot与Web开发2

接上一篇 Chapter4: SpringBoot与Web开发1 10. 配置嵌入式Servlet容器 SpringBoot默认采用Tomcat作为嵌入的Servlet容器&#xff1b;查看pom.xml的Diagram依赖图&#xff1a; 那么如何定制和修改Servlet容器的相关配置? 下面给出实操方案。 10.1 application.properties配…

依赖范围和编译classpath、测试classpath、运行classpath的关系

最近学习maven&#xff0c;这里看了下别人解释的区别原文&#xff0c;机翻一下&#xff0c;看的懵懵懂懂的 这其实应该是一个简单的区别&#xff0c;但我一直在Stackoverflow上回答一连串类似的问题&#xff0c;而人们往往会误解这个问题。 那么&#xff0c;什么是classpath&am…

[CF复盘] Codeforces Round 874 (Div. 3) 20230520】

[CF复盘] Codeforces Round 874 (Div. 3 20230520 总结A. Musical Puzzle![在这里插入图片描述](https://img-blog.csdnimg.cn/01ab8d835b4343659e8b80680dd9d639.png)2. 思路分析3. 代码实现 B. Restore the Weather1. 题目描述2. 思路分析3. 代码实现 C. Vlad Building Beaut…

FinClip | 2023 年 4 月产品大事记

我们的使命是使您&#xff08;业务专家和开发人员&#xff09;能够通过小程序解决您的关键业务流程挑战。不妨让我们看看在本月的产品与市场发布亮点&#xff0c;看看它们如何帮助您实现目标。 产品方面的相关动向&#x1f447;&#x1f447;&#x1f447; 全新版本的小程序统…