数据库(SQL sever)

news/2024/5/30 17:09:20/文章来源:https://blog.csdn.net/b19839356939/article/details/136568793

本博客将主要讲述数据库(SQL sever)

1.数据库解决的数据问题:

Data redundancy and inconsistency(数据冗余和不一致)

Difficulty in accessing data

Data isolation (数据孤立)

Integrity problems (完整性问题)

Atomicity of updates (更新操作的原子性)

Concurrent access by multiple users (多用户并发访问)

Security problems (安全性问题)

2.SQL语句大致分两种:

Data-Manipulation Language, DML (数据操纵语言)  查询

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

3.SQL数据库中往往用表来储存数据

元组(Tuple表中的一行被称为元组,代表了一个实体的一组属性值。又名:记录、行

属性(Attribute表中的一列被称为属性,代表了实体的一个特定属性。又名;字段、列

关系模式(Relation Schema: 定义了表的结构,包括表名、属性名以及属性的数据类型。

关键字(Key: 一个或一组属性,用于唯一标识元组。关键字在确保数据唯一性和完整性方面起着重要作用

每个属性的值、元素的集合又称:属性的域(domain)

元组中的属性是无序的。

元组在关系中出现的顺序是无关的。

笛卡尔积(Cartesian Product)

在数据库中,笛卡尔积(Cartesian Product)是指两个表的每一行都与另一个表的每一行组合在一起的结果集。这种组合会生成一个新的表,其中的每一行都包含两个表中对应行的所有列的值。

假设有两个表A和B,它们分别包含m和n行记录。那么这两个表的笛卡尔积将包含m * n行。在结果中,每一行都是表A的一行与表B的所有行的组合。

用数学符号表示,如果A表有a1, a2, ..., am列,B表有b1, b2, ..., bn列,那么它们的笛卡尔积可以表示为:

[ A \times B = {(a1, a2, ..., am, b1, b2, ..., bn) \mid a1 \in A, a2 \in A, ..., am \in A, b1 \in B, b2 \in B, ..., bn \in B} ]

在SQL中,可以使用CROSS JOIN  (交叉连接,又称自然连接)来获得两个表的笛卡尔积。例如,如果有两个表A和B,可以使用以下语句:

select * from A  cross join B;

SELECT * FROM A CROSS JOIN B;

需要注意的是,笛卡尔积的结果集可能非常大,尤其是当参与的表具有大量记录时。因此,在实际使用中,通常需要谨慎使用笛卡尔积,以避免性能问题。

原子域(Atomic Domain)

原子域指的是一个字段(列)中的数据应该是不可再分的最小单位。换句话说,一个字段中的数据应该是不可再分的单一数值或原子值。例如,在一个“姓名”字段中,如果将“姓”和“名”合并在同一个字段中,这就违反了原子性,因为“姓名”不再是不可再分的最小单位。

保持原子性有助于确保数据的一致性和规范性,同时也方便了数据库查询和维护。

第一范数(First Normal Form,1NF)

第一范数是关系数据库中的规范化的第一个步骤。一个关系被认为满足第一范数,如果它的所有属性都是原子的,即每个属性中的数据都是不可再分的。

在第一范数中,每个列都包含了有意义的原子数据,不存在重复的组合数据或集合数据。这有助于避免数据冗余和确保数据的一致性。

为了使关系满足第一范数,通常需要对表结构进行调整,将包含复合数据或集合数据的字段拆分成独立的原子属性。

举例说明,假设有一个包含学生信息的表格,其中有一个字段是“联系方式”,包含了多个电话号码。如果将电话号码放在一个字段中,就违反了原子性和第一范数。正确的做法是将每个电话号码拆分成独立的字段,以确保每个属性都是原子的。

在数据库设计中,满足第一范数是规范化的基本要求,而规范化则是一种设计技术,旨在通过消除冗余和依赖性,提高数据库的性能、一致性和可维护性。

几个常见重要的键

1.超码(Super Key)

超码是能够唯一标识元组的属性集合,它可以包含主码,也可以是不包含主码的属性集合

换句话说,超码是可以唯一标识元组的最小属性集合。它可能包含冗余属性,但是至少能够唯一地标识元组。

例如:学生表(学号、姓名、年龄)中,超码可以是{学号},也可以是{学号,姓名},也可以是{姓名,年龄}也可以是{学号,年龄}{学号,姓名,年龄}

候选键和主码都是超码: 所有的候选键和主码都是超码,因为它们都能确保唯一性。

主码是超码的特例,因为它是最小的超码

超码可以是一个或者多个

2.候选码(Candidate Key)

候选键是能够唯一标识关系表中每个元组的属性集合。候选码是最小的超码

与主码(Primary Key)类似,候选键的目的是确保表中的每行都有一个唯一标识符。在关系数据库设计中,可以从候选键中选择一个作为主码,而其他的候选键则可以作为备选键。

候选键具有以下特性:

唯一性: 候选键的属性集合能够唯一标识表中的每个元组,确保没有两行具有相同的候选键值。

最小性: 候选键是最小的,意味着如果从候选键中移除任何一个属性,就不能保证唯一性。候选键是最小超码。

不可包含冗余属性: 候选键中的每个属性都是必需的,没有冗余。移除任何属性都会破坏唯一性。

在关系数据库设计中,通常会有多个候选键可供选择。设计者需要根据具体的业务需求和数据特性选择一个候选键作为主码。其他未选择的候选键可以作为备选键,或者在实际应用中充当唯一性约束的附加手段。

考虑一个学生表的例子,可能存在学生ID、学生邮箱、和学生手机号这三个属性都能唯一标识每个学生。这三个属性都可以作为候选键,但最终只能选择其中一个作为主码。

候选码可以是一个或者多个

3.主码(Primary Key):

主码是用于唯一标识关系表中每个元组(行)的一组属性(列)。它确保了表中的每行都具有唯一性,没有两行具有相同的主码值。

主码在关系模型中是至关重要的,因为它能够确保数据的唯一性和完整性。常见的主码包括学生ID、订单号、账户号等,用于唯一标识每个实体或记录。

主码只能唯一且非空

4.外码(Foreign Key)

外码是一个或一组属性,它们在一个表中创建引用另一个表的主码外码建立了表之间的关联,允许在不同表之间建立引用完整性(Referential Integrity)。

外码通常用于确保在进行表之间的关联查询时,参考的值在相关表中确实存在。它创建了表与表之间的关联性,使得数据之间可以进行连接和关联查询

外码可为空,可以有一个或者多个

DDL语句

1.创建表

use 数据库名

create table department

(dept_name varchar (20),

 building varchar (15) not null,   --非空

budget numeric (12,2) check(budget>0),

primary key (dept_name),      --设置主码(在最后和定义时均可)

check(budget>0)),              --检查数据(在最后和定义时均可)

foreign key (dept_name) references instructor;   --设置外码

2.删除表

drop table 表名;

3.表的更新

3.1.添加列

alter table <表名>

        add column <列的定义>;

--例

alter table product

        add column product_name varchar(100);

3.2.删除列:

alter table <表名>

        drop column <列名>;

--例

alter table product

        drop column product_name;

3.3.插入行数据:

begin transaction;

insert into <表名>

        values ('T恤衫','衣服','0001',1000,500,'2009-02-05';

insert into <表名>

        values ('0002', '菜刀', '厨房用具', 2000,50,'2022-01-01');

commit;

3.4.更新数据:

update department

        set budget= budget*1.05;

3.5变更表名:

exec sp_rename '旧表名','新表名';

3.6.变更列名:

exec sp_rename '表名.旧字段名','新字段名','column';

3.7.修改列类型:

alter table <表名>

        alter column <列名> varchar(100);

常见问题 

AS的用法,as可以省略

查找顺序是 from  where  select

Null的比较都是null

Null+C常数=null

Join(连接)

交并补

聚集函数

Avg、Min、Max、Sum、Count,以上函数count不会忽视null,其他的都忽视null

Group by分组

Having过滤元组

Having用于组形成后,where用于组形成前

嵌套子查询

In

Not in

Someanyall

Exist和 no exist

Delete

Add

Update

Set case when then end

以上本次博客图片均来自于大连理工大学数据库教学PPT,如有侵权请联系删除。


这个博客如果对你有帮助,给博主一个免费的点赞就是最大的帮助❤
欢迎各位点赞,收藏和关注哦❤
如果有疑问或有不同见解,欢迎在评论区留言❤
后续会继续更新大连理工大学相关课程和有关数据库的内容
点赞加关注,学习不迷路,好,本次的学习就到这里啦

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

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

相关文章

bug - poi getMergedRegion合并后的行列number错误

第一个CellRangeAddress 的Row number 应该是0&#xff0c;但是给出的是1。 其它的CellRangeAddress 与实际大致相差4-5不等&#xff0c;没有规律。 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>…

自动从Android上拉取指定文件

需求场景 利用Mac中的脚本编辑器实现从连接的Android设备中获取指定的文件。 环境 macOS Monterey 版本 12.7.1脚本编辑器adb环境&#xff08;如果没有的话&#xff0c;可以网上搜下Mac配置adb&#xff09; 实现方案 1、打开脚本编辑器&#xff1b; 2、新建一个脚本文件&…

Python办公自动化之PDF(二)

Python操作PDF二 1、PyMuPDF简介2、 1、PyMuPDF简介 PyMuPDF&#xff08;也称Fitz&#xff09;开源&#xff0c;提供了一整套用于处理PDF文件的综合工具。使用PyMuPDF&#xff0c;用户可以高效地执行打开PDF、提取文本、图像和表格、操作旋转和裁剪等页面属性、创建新PDF文档以…

剑指offer面试题34:在二叉树中和为某一值的路径

面试题34&#xff1a;在二叉树中和为某一值的路径 题目&#xff1a; LCR 153. 二叉树中和为目标值的路径 - 力扣&#xff08;LeetCode&#xff09; 给你二叉树的根节点 root 和一个整数目标和 targetSum &#xff0c;找出所有 从根节点到叶子节点 路径总和等于给定目标和的路…

格子表单GRID-FORM | 必填项检验 BUG 修复实录

格子表单/GRID-FORM已在Github 开源&#xff0c;如能帮到您麻烦给个星&#x1f91d; GRID-FORM 系列文章 基于 VUE3 可视化低代码表单设计器嵌套表单与自定义脚本交互文档网站搭建&#xff08;VitePress&#xff09;与部署&#xff08;Github Pages&#xff09;必填项检验 BUG…

新版Android Studio火烈鸟 在新建项目工程时 无法选java的语言模板解决方法

前言 最近下载最新版androidstudio时 发现不能勾选java语言模板了 如果快速点击下一步 新建项目 默认是kotlin语言模板 这可能和google主推kt语言有关 勾选1 如图所示 如果勾选 No Activity 这个模板 是可以选java语言模板的 但是里面没有默认的Activity 勾选2 和以前的用法…

CubeMX使用教程(5)——定时器PWM输出

本篇我们将利用CubeMX产生频率固定、占空比可调的两路PWM信号输出 例如PA6引脚输出100Hz的PWM&#xff1b;PA7引脚输出500Hz的PWM&#xff0c;双路同时输出 我们还是利用上一章定时器中断的工程进行学习&#xff0c;这样比较方便 首先打开CubeMX对PA6、PA7进行GPIO配置 注&a…

spring 面试题

1.springboot自动装配 从 这个META-INF/spring-autoconfigure-metadata.properties加载文件 2.springbean 的生命周期 3.spring 如何解绝循环依赖 private final Map<String, Object> earlySingletonObjects new ConcurrentHashMap<>(16); private final Map&l…

【ArcGIS】栅格数据进行标准化(归一化)处理

栅格数据进行标准化&#xff08;归一化&#xff09;处理 方法1&#xff1a;栅格计算器方法2&#xff1a;模糊分析参考 栅格数据进行标准化(归一化)处理 方法1&#xff1a;栅格计算器 栅格计算器&#xff08;Raster Calculator&#xff09; 计算完毕后&#xff0c;得到归一化…

【Python使用】python高级进阶知识md总结第2篇:HTTP 请求报文,HTTP响应报文【附代码文档】

python高级进阶全知识知识笔记总结完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;操作系统&#xff0c;虚拟机软件&#xff0c;Ubuntu操作系统&#xff0c;Linux内核及发行版&#xff0c;查看目录命令&#xff0c;切换目录命令&#xff0c;绝对路径和相对…

Python环境搭建 -- Python与PyCharm安装

一、Python安装 我们先找到Python的官方网站&#xff0c;在浏览器中搜索Python即可&#xff0c;然后进入Python官网 点击Downloads&#xff0c;选择对应匹配的操作系统 点进去之后&#xff0c;Python的版本分为稳定的版本和前置版本&#xff0c;前置的版本就是还没有发行的版本…

【深入理解设计模式】模板方法模式

模板方法模式 模板方法模式是一种行为设计模式,它定义了一个操作中的算法骨架,将某些步骤延迟到子类中实现。模板方法模式使得子类可以不改变算法结构的情况下,重新定义算法的某些特定步骤。 概述 在面向对象程序设计过程中&#xff0c;程序员常常会遇到这种情况&#xff1a;…

在【IntelliJ IDEA】中配置【Tomcat】【2023版】【中文】【图文详解】

作为一款功能强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;IntelliJ IDEA为Web服务器提供了卓越的支持&#xff0c;从而极大地简化了程序员在Web开发过程中的工作流程。学习Java Web开发实质上就是掌握如何创造动态Web资源&#xff0c;这些资源在完成开发后&…

python之格式化输出format()函数使用总结

在 Python 中&#xff0c;format 方法是一种用于字符串格式化的强大工具。它允许你将变量或表达式插入到字符串中&#xff0c;并根据需要进行格式化。下面是对 format 方法的详细介绍&#xff1a; format 方法的基本语法如下&#xff1a; formatted_string "string {0} …

静态路由--添加路由表,实现非直连网段的通信

建立拓扑&#xff1a; 路由器**只有直连网段的路由表,而对非直连并不拥有,因此要在路由器的路由表中手动添加非直连网段的路由. ** 也就是说对于AR2来说&#xff0c;**网段192.168.10.0**和**网段192.168.40.0**是他的直连网段。进一步说这两个网端的设备可以相互通信而网段19…

Linux网络套接字之TCP网络程序

(&#xff61;&#xff65;∀&#xff65;)&#xff89;&#xff9e;嗨&#xff01;你好这里是ky233的主页&#xff1a;这里是ky233的主页&#xff0c;欢迎光临~https://blog.csdn.net/ky233?typeblog 点个关注不迷路⌯▾⌯ 目录 一、接口介绍 1.socket 2.listen 3.accept…

ssm蛋糕甜品商城系统(程序+文档+数据库)

** &#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;** 一、研究背景…

C# MES通信从入门到精通(1)——串口传输文件

前言: 在上位机软件开发领域,有一些工厂的mes系统需要我们通过串口发送文件的方式把一些图片或者检测数据csv文件等发送给服务器,这种方式是一些比较旧的工厂采用的方式,但是这种方式也是存在的,本文就是讲解如何使用串口发送文件详情见下文。 1、串口发送文件思路 将需…

Haproxy 负载均衡集群

一. Haproxy 1. Haproxy 介绍 HAProxy 是法国开发者威利塔罗 (Willy Tarreau) 在2000年使用C语言开发的一个开源软件&#xff0c;是一款具备高并发(一万以上)、高性能的TCP和HTTP负载均衡器&#xff0c;支持基于cookie的持久性&#xff0c;自动故障切换&#xff0c;支持正则…

脚手架cli快速创建Vue2/Vue3项目

前言&#xff1a; 本文的nodejs版本是14.21.3 第一步 进入cmd窗口 1、全局安装webpack npm install webpack-g&#xff0c; npm install webpack-g 第二步 2、全局安装vue脚手架 npm install -g vue/cli 第三步 3、初始化vue项目 &#xff08;vue脚手架使用webpack模…