首页 > 数据库 >数据库基础知识

数据库基础知识

时间:2024-10-15 21:49:07浏览次数:6  
标签:触发器 join 数据库 游标 基础知识 键值 主键

数据库范式

1NF:属性不可再分割,字段只能是一个值,不能再分为多个其他字段。

2NF:非主键字段之间不能存在依赖关系,必须完全依赖于主键。

3NF:所有非主键字段必须直接依赖于主键,不能存在传递依赖。

【注意】阿里巴巴开发手册这样说到:不得使用外键与级联,一切外键概念必须在应用层解决。

说明: 以学生和成绩的关系为例,学生表中的 student_id 是主键,那么成绩表中的 student_id 则为外键。如果更新学生表中的 student_id,同时触发成绩表中的 student_id 更新,即为级联更新。外键与级联更新适用于单机低并发,不适合分布式、高并发集群;级联更新是强阻塞,存在数据库更新风暴的风险;外键影响数据库的插入速度

数据库设计通常分为哪几步?

  1. 需求分析 : 分析用户的需求,包括数据、功能和性能需求。

  2. 概念结构设计 : 主要采用 E-R 模型进行设计,包括画 E-R 图。

  3. 逻辑结构设计 : 通过将 E-R 图转换成表,实现从 E-R 模型到关系模型的转换。

  4. 物理结构设计 : 主要是为所设计的数据库选择合适的存储结构和存取路径。

  5. 数据库实施 : 包括编程、测试和试运行。

  6. 数据库的运行和维护 : 系统的运行与数据库的日常维护。

NoSQL

概念:非关系型数据库,主要针对键值、文档以及图形类型数据存储。

NoSQL数据库代表:HBase、MongoDB、Redis

SQL 数据库NoSQL 数据库
数据存储模型结构化存储,具有固定行和列的表格非结构化存储。文档:JSON 文档,键值:键值对,宽列:包含行和动态列的表,图:节点和边
发展历程减少数据重复提升可扩展性,减少大规模数据的存储成本
例子Oracle、MySQL、Microsoft SQL Server、PostgreSQL文档:MongoDB、CouchDB,键值:Redis、DynamoDB,宽列:Cassandra、 HBase,图表:Neo4j、 Amazon Neptune、Giraph
ACID 属性提供原子性、一致性、隔离性和持久性 (ACID) 属性通常不支持 ACID 事务,为了可扩展、高性能进行了权衡,少部分支持比如 MongoDB 。不过,MongoDB 对 ACID 事务 的支持和 MySQL 还是有所区别的。
性能性能通常取决于磁盘子系统。要获得最佳性能,通常需要优化查询、索引和表结构。性能通常由底层硬件集群大小、网络延迟以及调用应用程序来决定。
扩展垂直(使用性能更强大的服务器进行扩展)、读写分离、分库分表横向(增加服务器的方式横向扩展,通常是基于分片机制)
用途普通企业级的项目的数据存储用途广泛比如图数据库支持分析和遍历连接数据之间的关系、键值数据库可以处理大量数据扩展和极高的状态变化

游标

  • 应用场景:批量更新/删除数据,逐行处理查询结果。

  • 使用游标的几个明确步骤:

    • 声明游标,这个过程世纪没有检索数据,它只是定义要使用的SELECT语句和游标选项。
    • 一旦声明,就必须打开游标以供使用,这个过程用前面定义的SELECT语句把数据世纪检索出来。
    • 对于填有用的游标,根据需要取出各行。
    • 结束游标使用时,必须关闭 & 释放 游标。

触发器

  • 应用场景:

  • 优点:

    • 捕获数据库层中业务逻辑中的错误。
    • 检查数据完整性。
  • 说明:

    • trigger_name:触发器名

    • trigger_time : 触发器的触发时机。取值为 BEFOREAFTER

    • trigger_event : 触发器的监听事件。取值为 INSERTUPDATEDELETE

    • table_name : 触发器的监听目标。指定在哪张表上建立触发器。

    • FOR EACH ROW: 行级监视,Mysql 固定写法,其他 DBMS 不同。

    • trigger_statements: 触发器执行动作。是一条或多条 SQL 语句的列表,列表内的每条语句都必须用分号 ;` 来结尾。

当触发器的触发条件满足时,将会执行 BEGINEND 之间的触发器执行动作。

书写高质量SQL建议

  1. 查询最大/小记录,建议使用 limit 1
  2. 尽量避免在where子句中使用or来连接条件(使用or可能会使索引失效,从而全表扫描)
  3. like模糊查询
select userId,namefromuserwhere userId like'123%';
# 反例:%123  --> 导致索引失效
  1. Inner join 、left join、right join,优先使用Inner join,如果是left join,左边表结果尽量小
    理由:
  • 如果inner join是等值连接,或许返回的行数比较少,所以性能相对会好一点。
  • 使用了左连接,左边表数据结果尽量小,条件尽量放到左边处理,意味着返回的行数可能比较少。
  1. 慎用distinct关键字,字段很多的请款下,会大大降低查询效率。

标签:触发器,join,数据库,游标,基础知识,键值,主键
From: https://blog.csdn.net/m0_74119287/article/details/142965502

相关文章

  • MySQL数据库宕机,启动不起来,教你一招搞定!
    查看MySQLerror日志查看MySQLerror日志,排查哪个表(表空间)文件破坏或者丢失,线索就是[pageid:space=xxx,pagenumber=xxx]。2024-09-09T10:12:39.111413+08:000[ERROR]InnoDB:Databasepagecorruptionondiskorafailedfilereadofpage[pageid:space=73,page......
  • MySQL数据页损坏,数据库启动不起来,再教你一招搞定!
    上一篇文章[MySQL数据库宕机,启动不起来,教你一招搞定!]介绍了数据页损坏一种修复方法,现在介绍另外一种方法,使用第三方工具Inno_space来进行修复。Inno_space是一个专为解析和修复InnoDB表空间文件(.ibd)设计的命令行工具。它允许用户直接访问和操作这些文件,同时还支持修复corrupt......
  • C++使用MySQL官方的C API访问MySQL数据库
    这篇文章是一个简单的C++使用MySQL官方的CAPI访问MySQL数据库的代码示例。//main.h#ifndef_H_#define_H_#include<stdio.h>#include<Windows.h>#include<mysql.h>#pragmacomment(lib,"libmysql.lib")#defineinsert_prepare"insertintotest_tbvalue......
  • jumpserver堡垒机部署 添加资产主机和MySQL数据库,图解过程
    jumpserver堡垒机部署JumpServer是广受欢迎的开源堡垒机,是符合4A规范的专业运维安全审计系统。JumpServer帮助企业以更安全的方式管控和登录所有类型的资产,实现事前授权、事中监察、事后审计,满足等保合规要求。下载软件包JumpServer-开源堡垒机-官网#官方网址......
  • 第1节 计算机基础知识
    如何测试:1.需求测试,2.界面测试3.功能测试4.可靠性测试5.可移植性测试6.兼容性测试7.易用性测试8.安全性测试9.性能角度购物车:1.需求说明书2.界面排版(网格、卷轴)、按键图标大小颜色,3.功能测试添加、删除、结算,进入店铺4.可靠性各种网络条件和温度的影响5.可移植性......
  • 循序渐进丨MogDB 数据库查询重写规则lazyagg详解
    问题概述在MogDB和openGauss中,参数rewrite_rule用于控制查询重写,本文介绍查询重写规则lazyagg。在未设置rewrite_rule=lazyagg的情况下,子查询中有GROUPBY会先进行GROUPBY;lazyagg表示延迟聚合运算,目的是消除子查询中的聚合运算,先关联再GROUPBY;当子查询中有GROUPBY,子......
  • 数据库八股文——摘自黑马程序员
    InnoDB和MyIsam区别如何定位慢查询?通过一些运维工具如Skywalking,检测出哪个接口比较慢,最终因为是SQL的问题在mysql中开启慢日志查询,比如我们设置的值是2秒,一旦sql执行超过2秒就会记录到日志中。(调试阶段)如何分析慢查询可以采用EXPLAIN或者DESC命令获取MySQL如何执行SELEC......
  • 灾难恢复:邮箱数据库操作总结:整理 查询邮箱数据库大小和空白数据大小(重要文档)
    灾难恢复:邮箱数据库操作总结:整理查询邮箱数据库大小和空白数据大小(重要文档)邮箱数据库整理查询邮箱数据库大小和空白数据大小AvailableNewMailboxSpace是指的这个总空间里可以被“减肥”掉的空间。Get-MailboxDatabase db0* -Status|FTName,@{n="MailboxCount";e={(Get-M......
  • SQLServer数据库日志太大处理方式
    SQLServer数据库日志太大处理方式1.1 如下图,点击连接登陆数据库1.2 如下图,打开数据库属性窗口1.3 如下图,更改数据库恢复模式1.4 如下图,收缩数据库日志到这里已经完成了,数据库的日志收缩1.5 如下图,数据库恢复模式修改为完整至此,完成。......
  • 【计算机毕设选题推荐】基于Python的热门微博数据可视化分析的设计与实现 【附源码+数
    ✍✍计算机编程指导师⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流!⚡⚡Java实战|SpringBoot/SSMPython实战项目|Django微信小程......