《SQL与关系数据库理论——如何编写健壮的SQL代码》一1.9 值vs.变量

简介: 本节书摘来华章计算机《交互式程序设计 第2版》一书中的第1章 ,第1.9节,Joshua Noble 著 毛顺兵 张婷婷 陈宇 沈鑫 任灿江 译更多章节内容可以访问云栖社区“华章计算机”公众号查看。 1.9 值vs.变量 关系(relation)和关系变量(relvar)的逻辑差异实际上是通常意义下值与变量之间逻辑差异的特例。

本节书摘来华章计算机《SQL与关系数据库理论——如何编写健壮的SQL代码》一书中的第1章 ,第1.9节 C. J. Date 著 单世民 何英昊 许侃 译 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.9 值vs.变量

关系(relation)和关系变量(relvar)的逻辑差异实际上是通常意义下值与变量之间逻辑差异的特例。现在,谈谈通常意义下的情形(有点偏题,不过有必要这么做,因为清晰的思路在特别多的方面都非常有益)。下面给出一些定义:
定义 值(value)是逻辑学家所说的“单个常量”,比如整数3。一个值不存在于时空之中。然而,值可以通过某些编码在记忆中表示,而这些表示或编码在时空中存在。事实上,同一个值可以在不同的时间和地点以不同的形式表示。或者说,任意多个不同的变量(参见下个定义)在相同或不同的时间可以有相同的值。特别的,根据定义可知,值本身是不能被更新的;因为如果它能被更新,那么在更新之后它就不再是它本身了。
定义 变量是用于表示值的容器。一个变量存在于时空之中。同时,变量可以被更新,这一点和值不同。也就是说,可以用另外一个值替换变量的当前值。这就是“变量”的含义——作为变量就要可更新,可更新的才是变量;同样的,作为变量就要可赋值,可赋值的才是变量。
请特别小心,并不是只有整数3这样的简单事物才是合法值。相反,取值可以是很复杂的。比如,一个值可以是一个几何点,一个多边形,一条X射线,一个XML文档,一个指纹,一个数组,一个堆栈,一个列表或者一个关系等等。当然,类似的说明也适用于变量。下一章中会对这样的问题详细说明。你可能很难想象人们会在取值和变量这样明显并基础的差异上感到困惑。然而,事实并非如此。在此方面是十分容易掉入陷阱的。为了说明这种情况,考虑如下从某个对象数据库教程中抽取出来的内容(在方括号中的斜体部分是我给出的注释),如下所示:
我们区分变量的已声明类型是根据……对象的类型是变量的当前值[所以对象是值] ……我们从值区分对象[所以对象终究不是值] ……一个设值方法[是运算符使得]可能会查看其对于其他对象的影响[所以,对象实际上是变量]。

相关实践学习
MySQL数据库快速部署实践
本场景主要介绍如何在一台配置了CentOS 7.7版本的ECS实例(云服务器)上安装mysql,执行mysql的常用操作,学习基本的SQL语句。
相关文章
|
存储 关系型数据库 数据库
附部署代码|云数据库RDS 全托管 Supabase服务:小白轻松搞定开发AI应用
本文通过一个 Agentic RAG 应用的完整构建流程,展示了如何借助 RDS Supabase 快速搭建具备知识处理与智能决策能力的 AI 应用,展示从数据准备到应用部署的全流程,相较于传统开发模式效率大幅提升。
附部署代码|云数据库RDS 全托管 Supabase服务:小白轻松搞定开发AI应用
|
存储 缓存 数据库
数据库数据删除策略:硬删除vs软删除的最佳实践指南
在项目开发中,“删除”操作常见但方式多样,主要分为硬删除与软删除。硬删除直接从数据库移除数据,操作简单、高效,但不可恢复;适用于临时或敏感数据。软删除通过标记字段保留数据,支持恢复和审计,但增加查询复杂度与数据量;适合需追踪历史或可恢复的场景。两者各有优劣,实际开发中常结合使用以满足不同需求。
1594 4
|
SQL 自然语言处理 数据库
【Azure Developer】分享两段Python代码处理表格(CSV格式)数据 : 根据每列的内容生成SQL语句
本文介绍了使用Python Pandas处理数据收集任务中格式不统一的问题。针对两种情况:服务名对应多人拥有状态(1/0表示),以及服务名与人名重复列的情况,分别采用双层for循环和字典数据结构实现数据转换,最终生成Name对应的Services列表(逗号分隔)。此方法高效解决大量数据的人工处理难题,减少错误并提升效率。文中附带代码示例及执行结果截图,便于理解和实践。
458 5
|
SQL 关系型数据库 PostgreSQL
CTE vs 子查询:深入拆解PostgreSQL复杂SQL的隐藏性能差异
本文深入探讨了PostgreSQL中CTE(公共表表达式)与子查询的选择对SQL性能的影响。通过分析两者底层机制,揭示CTE的物化特性及子查询的优化融合优势,并结合多场景案例对比执行效率。最终给出决策指南,帮助开发者根据数据量、引用次数和复杂度选择最优方案,同时提供高级优化技巧和版本演进建议,助力SQL性能调优。
1626 1
|
SQL Java 数据库连接
如何在 Java 代码中使用 JSqlParser 解析复杂的 SQL 语句?
大家好,我是 V 哥。JSqlParser 是一个用于解析 SQL 语句的 Java 库,可将 SQL 解析为 Java 对象树,支持多种 SQL 类型(如 `SELECT`、`INSERT` 等)。它适用于 SQL 分析、修改、生成和验证等场景。通过 Maven 或 Gradle 安装后,可以方便地在 Java 代码中使用。
5254 11
|
存储 数据采集 数据挖掘
CSV vs 数据库:数据存储的最佳选择是什么
本文介绍了爬虫数据存储中CSV和数据库的优缺点,分析了两者在不同场景下的适用性。CSV简单易用、资源消耗低,适合小量数据;数据库则在处理大量数据和复杂查询时表现出色,支持并发操作。通过Python代码示例,展示了如何使用多线程和爬虫代理IP技术将百度搜索数据存储到MySQL数据库中,适用于大型项目和复杂数据分析需求。
1065 2
|
SQL 存储 Oracle
南大通用GBase 8s数据库游标变量解析:提升数据库操作效率
南大通用GBase 8s 数据库游标变量解析:提升数据库操作效率
|
缓存 物联网 数据库
InfluxDB vs TDengine :2025 年了,谁家用的数据库还不能高效读缓存?
在工业互联网和物联网的大数据应用场景中,实时数据的写入和查询性能至关重要。如何快速获取最新设备状态并实时处理数据,直接影响到业务的高效运转。本文将深入分析 TDengine 和 InfluxDB 在缓存机制上的差异,帮助读者更好地理解这两款主流时序数据库在性能优化方面的优劣。
1407 1
|
存储 关系型数据库 MySQL
MySQL vs. PostgreSQL:选择适合你的开源数据库
在众多开源数据库中,MySQL和PostgreSQL无疑是最受欢迎的两个。它们都有着强大的功能、广泛的社区支持和丰富的生态系统。然而,它们在设计理念、性能特点、功能特性等方面存在着显著的差异。本文将从这三个方面对MySQL和PostgreSQL进行比较,以帮助您选择更适合您需求的开源数据库。
922 4