一文介绍SQL标准1986~2023的演变

news2024/10/11 18:50:05

SQL标准1986年制定第一版,到最新的2023版,已经有38年的历史,现在依然是计算机非常活跃的语言,50%的程序员都能掌握SQL,数据分析师也是SQL的主要使用人员之一。

图片

从早期的基本语法,到融合了XML、JSON等复杂数据类型,存储过程标准,元数据标准等等等,SQL语言规范发生巨大的变化,但是SQL标准总是落后市场太多,虽然名为标准,但是各大数据库厂商基本只遵守早期的内容,后期新的规范缺少指导意义,有如东周王室与各诸侯国关系(一言难尽,后面待续 ...)

本文来自 Matthew Mullins(Coginiti公司CTO)发表的博客文章,并增加了一些配图和注解,可以带大家快速了解SQL近40年的发展历史:

图片

---------------

在数据管理领域,SQL(结构化查询语言,Structured Query Language)的出现标志着数据库系统历史上的一个关键时刻。SQL最初由IBM的Donald D. Chamberlin和Raymond F. Boyce在20世纪70年代初开发,是旨在利用Edgar F. Codd的关系数据库模型潜力的项目的一部分。该模型提出了一种以行和列的结构化数据的方式,这一概念彻底改变了计算机系统中信息的存储、检索和操作方式。

SQL的标准化始于SQL-86,由美国国家标准协会(ANSI)支持。这个第一版标准为SQL奠定了基础,使其成为关系数据库管理系统(RDBMS)中管理和查询数据的通用语言。多年来,SQL标准已经发生了显著的演变,以适应数据存储、检索和处理需求的变化。这些标准不仅反映了数据库技术的进步,而且塑造了跨不同应用程序和平台的数据管理方式。

我们从SQL-86到最新的SQL:2023的演变之旅,不仅仅是技术增强的编年史。这是对其创造者的持久愿景和不断努力使数据更易于访问和操作的证明。当我们深入研究每个版本的SQL标准时,我们强调了已经成为现代数据管理实践不可或缺的功能的引入和完善。无论您是数据库专业人员、开发人员还是爱好者,了解SQL标准的历程和进步都为您提供了对这项基础技术的功能和多功能性的宝贵见解。

SQL-86 – 起点

标准化SQL历史的第一章以SQL-86开始,也正式称为SQL-87。这个版本标志着首次尝试标准化SQL语言,以用于关系数据库管理系统,这是确保不同数据库系统之间一致性和互操作性的关键一步。

图片

SQL-86的特点在于其简单性和对SQL核心方面的关注。该标准定义了SQL的基本框架,包括基本的数据定义语言(DDL)和数据操作语言(DML)操作。SQL-86中的DDL操作包括创建(CREATE TABLE)和删除(DROP TABLE)表,构成了数据库结构管理的基础。同时,DML操作涵盖了与存储数据交互的基本功能:查询数据(SELECT)、插入新行(INSERT)、更新现有数据(UPDATE)和删除数据(DELETE)。

除了这些操作外,SQL-86还引入了基本的查询功能。它支持简单的WHERE子句进行数据过滤,基本的算术和比较运算符,以及一些聚合函数,如COUNTSUMAVGMINMAX。这些功能为数据检索和基本分析提供了基本工具。

SQL-86中可用的数据类型是基础的,侧重于像INTEGER、SMALLINT和VARCHAR这样的主要类型。这种有限的范围反映了当时数据库系统的主要需求,优先考虑简单的数据存储和检索。

然而,SQL-86的简单性也意味着它有明显的局限性。它缺乏后来成为SQL标准功能的高级功能,如JOIN操作、外键约束、视图和复杂的事务控制。这些局限性反映了关系数据库技术的早期阶段和对数据库查询语言所需内容的不断发展的理解。

SQL-86为SQL的未来奠定了基础。它在标准化查询语言的概念仍然新颖的时候为数据库建立了一种共同语言。虽然它只提供了一个基本的工具包,但它是将SQL发展成为今天能够处理无数应用程序和系统中复杂和多样化的数据管理任务的丰富和多功能语言的第一步。

(阅读完整的SQL-86标准)

https://archive.org/details/federalinformati127nati/mode/2up

SQL-89 – 早期增强

在建立第一个SQL标准仅仅几年后,引入了SQL-89更新。虽然SQL-89是一个相对较小的修订,但它解决了初始标准中未涵盖的关键数据库管理方面。这些增强在将SQL从基本数据操作语言发展为更强大的数据库管理和安全工具方面至关重要。

SQL-89中的关键添加之一是引入了完整性约束。这些约束对于维护数据库中数据的准确性和可靠性至关重要。SQL-89特别关注主键约束,确保表中的每一行都通过其在指定列中的值唯一标识。这一添加标志着向更复杂的数据完整性和关系数据建模迈出了重要一步。

SQL-89中的另一个重大增强是包括了基本安全功能,特别是GRANTREVOKE语句。这些命令使数据库管理员能够更细粒度地控制对数据的访问。GRANT语句允许将权限分配给用户或角色,使他们能够对给定表执行特定操作,如选择、插入、更新或删除数据。相反,REVOKE语句用于移除这些权限。这种对数据访问的控制对于管理数据安全和确保只有授权用户才能对数据库执行某些操作至关重要。

尽管SQL-89没有引入大量功能,但它所做的添加在加强SQL的基础方面具有重要意义。引入完整性约束和基本安全功能为后续版本中将添加的更高级功能奠定了基础。通过解决这些基本需求,SQL-89在SQL作为可靠和安全的数据库管理语言的发展中发挥了关键作用。

SQL-92 (SQL2) – 重大飞跃

SQL-92的发布,也称为SQL2,标志着SQL演变中的一个里程碑时刻。这个版本不仅仅是一个增量更新,而是一个重大的改革,显著扩展了SQL语言的功能。SQL-92为数据库系统设定了新的基准,并为今天我们使用的现代SQL奠定了基础。

SQL-92中最重要的增强之一是引入了JOIN操作。这一功能在构建查询方面带来了根本性的变化,允许跨多个表进行更复杂的数据检索。JOIN操作,包括INNER JOIN、LEFT OUTER JOIN、RIGHT OUTER JOIN和FULL OUTER JOIN,使用户能够基于它们之间的相关列组合两个或多个表中的行。这种能力对于关系数据库操作至关重要,促进了更复杂和有意义的数据关系和分析。(注:没有SQL标准前,Oracle曾经使用(+)来表示outer join,让新手一头雾水)

子查询是SQL-92中的另一个重要添加。这些是嵌套在其他查询中的查询,为创建更动态和灵活的SQL语句提供了强大的工具。子查询增强了语言处理复杂数据检索场景的能力,使SQL在满足多样化的数据操作需求方面变得更加多功能和有效。

SQL-92还引入了一系列新的数据类型,以适应更广泛的数据表示范围。这些包括DATE、TIME、TIMESTAMP、INTERVAL以及各种数值和字符串类型。数据类型的扩展是对数据库中存储和处理的数据复杂性日益增加的直接响应,反映了数据库应用程序不断演变的需求。

此外,SQL-92在事务控制和数据完整性方面取得了显著进展。它引入了事务隔离级别、约束(如CHECK、UNIQUE、FOREIGN KEY)和声明式引用完整性的概念。这些功能为维护数据一致性、完整性和管理并发数据库操作提供了更强大的机制。

(注:INFORMATION_SCHEMA也是SQL92的标准metadata视图,除了MySQL外,遵守的数据库比较少,有些数据库元数据体系早已建立,也只是草草适配了下INFORMATION_SCHEMA的格式,里面可用的内容太少)

SQL-92的进步对数据库系统产生了深远影响。通过显著扩大SQL的范围和功能,它使更复杂的数据建模、查询和分析成为可能。这一标准对于巩固SQL作为关系数据库的主要语言的地位至关重要,并为数据库技术的持续创新奠定了基础。SQL-92的全面功能集使其转变为一个更强大的工具,能够处理现代数据环境中的复杂需求。

SQL:1999 (SQL3) – 超越传统模型

SQL:1999的发布,也称为SQL3,标志着SQL标准的一个重要进步,引入了一系列复杂的功能,显著扩展了SQL超越传统关系数据库模型的能力。

  1. 引入对象关系特性:SQL:1999带来了对象关系能力,将面向对象编程概念与已建立的关系模型相结合。这种集成允许更复杂和自然的数据结构,包括表继承和用户定义类型(UDT)。这些UDT使用户能够创建自定义数据类型,使数据库模式更紧密地符合现实世界数据的复杂性。(注:对象关系特性目前主要是PostgreSQL系列支持,没有得到市场广泛推广,这也是SQL标准与实际脱离的早期迹象之一)

  2. 触发器、递归查询和公共表表达式(CTE,Common Table Expressions):触发器的引入是一个重大增强,它使得在数据库发生特定变化(如插入、更新或删除)时可以自动执行程序化操作。递归查询是SQL查询能力的显著增加,允许处理层次或嵌套数据结构。公共表表达式(CTE),包括WITH子句,被引入,提供了一种更易于阅读和灵活的方式来编写复杂查询。CTE使得定义可以在SELECT、INSERT、UPDATE或DELETE语句中引用的临时结果集成为可能。

  3. 高级分析功能 - OLAP扩展:SQL:1999引入了对GROUP BY子句的几个扩展,特别是ROLLUPCUBEGROUPING SETS。这些扩展是OLAP(在线分析处理)功能的核心,增强了SQL的数据汇总和分析能力。ROLLUP有助于层次数据汇总,允许在多个级别上进行累积总数。CUBE提供了一种生成所有可能的属性组合的聚合数据的方法,适用于多维数据分析。GROUPING SETS提供了一种更灵活的方式来在单个查询中指定多个分组集,增强了生成全面汇总报告的能力。(注:数据分析场景,应用软件比较少用)

  4. (注:存储过程也是SQL:1999引入,但是各个数据库引擎都有自己的语言编译系统,这部分基本没有统一,大家都是各干各的,比如T-SQL、PL/SQL等等)

SQL:1999引入的进步显著扩大了SQL的范围。通过将SQL与当代编程范式对齐并增强其分析能力,这个版本的标准对于适应现代数据环境日益复杂的需求至关重要。SQL:1999的丰富功能集为SQL语言的进一步发展奠定了坚实的基础,为未来的创新铺平了道路。

SQL:2003 – XML集成

SQL:2003标志着SQL演变中的另一个重要里程碑,引入了进一步弥合传统关系数据库和现代数据处理新兴需求之间差距的功能。这个标准以其XML集成而特别引人注目,反映了这种格式在数据交换和Web服务中日益增长的重要性。

  1. 引入SQL/XML特性:SQL:2003最突出的添加是XML的集成。该标准引入了XML数据类型,使得在SQL数据库中存储和操作XML文档成为可能。这一功能是对XML在各种应用程序中广泛采用的直接响应,并且需要关系数据库有效地处理XML数据。SQL:2003包括了几个用于处理XML数据的函数和操作符,例如XML解析和序列化。这些工具允许在XML和关系数据之间进行转换,使不同来源的数据集成更加容易。(注:XML曾经被给予了过高的预期,SQLServer、IBM、Oracle在数据库上都投入了大量的心血,但是开发者更喜欢简洁的语法,XML标准逐渐被JSON、YAML等格式取代)

  2. 序列生成器(Sequence)和自增列:SQL:2003引入了序列生成器,提供了一种标准化的方法来生成唯一的、顺序的值,通常用于主键生成。这一功能对于确保数据完整性和一致性至关重要,尤其是在数据插入量很大的环境中。对自增列的增强也进行了改进,提供了更多的控制和灵活性。自增列在添加新行时自动生成唯一值,简化了数据输入过程。(注:自增列在SQLServer、MySQL很早就有,但是语法差异非常大,现在大家也是谁也不鸟)

  3. 窗口函数的扩展:SQL:2003的另一个关键特性是窗口函数的扩展。这些函数允许对与当前行相关的一组行执行计算,这对于复杂的分析任务特别有用。SQL:2003引入了新的窗口函数并扩展了现有窗口函数的能力,允许进行更复杂的数据分析和报告。这一增强对于依赖SQL进行数据驱动决策的企业和分析师来说具有重要意义。(注:窗口函数比较难掌握,但是在数据分析中非常有价值)

SQL:2003引入的SQL/XML和其他高级功能是将SQL与数据管理演变趋势对齐的重要一步。通过适应XML的日益普及并增强分析能力,SQL:2003不仅扩大了SQL的多功能性,还确保了其在快速变化的技术格局中的持续相关性。该标准代表了SQL持续旅程中的关键发展,加强了其作为现代数据库系统的全面工具的地位。

SQL:2006和SQL:2008 – 改进

SQL的发展在SQL:2006和SQL:2008的更新中继续进行。虽然这些修订没有它们的前身那么广泛,但它们引入了特定改进和功能,以应对数据库技术中的新兴趋势和需求。

  1. SQL:2006的增强:SQL:2006继续了SQL:2003中开始的XML集成,进一步巩固了SQL和XML之间的关系。它专注于增强SQL数据库中XML的功能性和易用性,反映了XML在数据交换和Web服务中持续的重要性。这个版本的标准引入了额外的功能来查询和操作XML数据。这些增强旨在提高处理XML的效率和灵活性,确保SQL数据库能够无缝地将XML作为其核心功能的一部分。(注:SQL标准花了大量时间在XML上,现在看起来不太重要的事情...)

  2. SQL:2008的关键特性:虽然SQL:2008被认为是一个小修订,但它引入了一些值得注意的功能,增加了SQL的健壮性和易用性。SQL:2008中INSTEAD OF触发器的引入是一个重要的增强。这些触发器允许指定在视图上执行标准操作(如插入、更新或删除)时执行的自定义操作,提供了对数据操作的更多控制,增强了语言的灵活性。另一个重要的添加是TRUNCATE TABLE语句。这个功能提供了一种更有效的方式来删除表中的所有行,对于大型表来说特别有用,在大型表中逐行删除将是耗时和资源密集型的。

  3. (补充)分页语法:分页语法标准各种数据库都是五花八门,也是应用软件适配各种数据库的主要工作之一

  4. SELECT * FROM T LIMIT 10 OFFSET 20 -- Netezza, MySQL, PostgreSQL (also supports the standard, since version 8.4), SQLite, HSQLDB, H2
    SELECT * from T WHERE ROWNUM <= 10 -- Oracle (also supports the standard, since Oracle8i)
    SELECT FIRST 10 * from T -- Ingres
    SELECT FIRST 10 * FROM T order by a -- Informix
    SELECT SKIP 20 FIRST 10 * FROM T order by c, d -- Informix (row numbers are filtered after order by is evaluated. SKIP clause was introduced in a v10.00.xC4 fixpack)
    SELECT TOP 10 * FROM T -- MS SQL Server, Sybase ASE, MS Access
    SELECT TOP 10 START AT 20 * FROM T -- Sybase SQL Anywhere (also supports the standard, since version 9.0.1)
    SELECT FIRST 10 SKIP 20 * FROM T -- Interbase, Firebird
    SELECT * FROM T ROWS 20 TO 30 -- Firebird (since version 2.1)
    SELECT * FROM TWHERE ID_T > 10 FETCH FIRST 10 ROWS ONLY -- DB2
    SELECT * FROM TWHERE ID_T > 20 FETCH FIRST 10 ROWS ONLY -- DB2 (new rows are filtered after comparing with key column of table T)

        SQL:2008全新制定了SQL的分页语法标准规范,使用了类似下面的offset fetch语法(注:标准出台太晚,也远不如MySQL、PostgreSQL方便)

OFFSET 10 ROWS FETCH 100 ROWS ONLY

SQL:2006和SQL:2008通过其专注的更新展示了对SQL能力的持续承诺和扩展。这些修订确保了SQL的适应性和相关性,能够满足数据库管理系统不断发展的要求。SQL:2006中增强的XML功能和SQL:2008中引入的实用功能如INSTEAD OF触发器和TRUNCATE TABLE是SQL持续发展中的关键步骤,保持了其作为数据管理中强大和多功能工具的地位。

SQL:2011和SQL:2016 – 现代特性增强和JSON引入

SQL的发展在SQL:2011和SQL:2016的更新中继续,专注于现代数据管理需求和集成新兴数据格式。

  1. SQL:2011 – 时态数据和增强索引:SQL:2011引入了对时态数据的支持,允许跨不同时间维度管理和查询数据。这一功能对于需要历史数据分析、审计和基于时间的报告的应用程序至关重要(注:核心是数据库支持查询历史某个时间数据的能力,如查询3天前customers表的数据状态:SELECT * FROM customers AS OF SYSTEM TIME current_date - 3 days ;) 。SQL:2011中的增强索引提高了查询的性能和效率,这对于大型和复杂的数据库至关重要。这些新的索引技术优化了数据检索和存储,解决了可扩展性和性能挑战。

  2. SQL:2016 – 引入JSON和高级分析:SQL:2016的标志性是引入了JSON数据处理。这一功能迎合了JSON作为数据交换格式的广泛使用,尤其是在Web应用程序中。SQL:2016提供了一套函数和操作符,用于高效地存储、操作和查询JSON数据。JSON语法的关键方面包括:

    • JSON_VALUEJSON_QUERY用于从JSON字符串中提取数据。

    • JSON_OBJECTJSON_ARRAY用于创建JSON结构。

    • IS JSON谓词用于验证字符串是否包含有效的JSON。

    • 标准化的JSON路径语言用于指定JSON数据内的位置。

  • SQL:2016中的高级分析通过新的和增强的分析功能得到了加强,增强了更复杂的数据分析和商业智能能力。

SQL:2011和SQL:2016共同丰富了SQL的功能集,确保了其在不断发展的数据管理环境中的适应性和相关性。引入对临时数据的支持、高级索引技术和JSON数据处理,以及分析功能的改进,强调了SQL作为现代数据库系统的全面工具的作用。这些版本标志着SQL发展中的重要步伐,满足了当代数据环境的复杂需求。

SQL:2023 – 最新的前沿

SQL:2023作为SQL标准的最新和最现代的迭代,包含了一系列与数据管理的最新趋势和需求一致的增强和功能。这个版本的SQL反映了向前迈出的重大飞跃,引入了关键更新,以满足数据库技术和用户多样化需求的演变。

  1. 引入属性图查询:SQL:2023中一个突出的功能是增加了属性图查询(SQL/PGQ)。这一新功能显著缩小了关系数据库管理系统(RDBMS)和图数据库系统之间的差距。SQL/PGQ允许用户将关系表中的数据作为图数据库存储的数据进行查询。这对于处理复杂关系和相互连接的数据集的应用程序特别有益,例如社交网络、推荐系统和网络分析。

  2. 增强JSON支持:在SQL:2016中引入的JSON功能的基础上,SQL:2023进一步增强了JSON数据处理。它引入了本地JSON数据类型,简化了SQL数据库中JSON的存储和操作。增强的JSON支持包括操作如JSON_SERIALIZEJSON_SCALARIS JSON,以及额外的JSON相关语法,为处理JSON数据提供了更全面的工具。这一增强是对JSON作为数据交换格式持续普及的响应,尤其是在基于Web和网络的应用程序中。

  3. 简化数据处理和其他改进:SQL:2023简化了数据处理的几个方面,使语言更易于访问和使用。这包括允许在某些操作中使用更直观和简化的语法,旨在提高编写和维护SQL代码的效率。其他改进包括新功能和对现有功能的增强,进一步增强了SQL在各个数据处理和分析领域的能力。

SQL:2023代表了SQL持续发展的一个重要里程碑。通过引入属性图查询和增强JSON支持,这个版本的SQL不仅迎合了现代数据建模概念,而且扩大了其在各种复杂数据场景中的适用性。数据处理的简化和改进反映了根据用户需求和技术进步发展SQL的承诺。作为最新的标准,SQL:2023展示了SQL的持久适应性及其在不断变化的数据管理和分析世界中的关键作用。

SQL不断发展的格局

当我们从SQL-86的起源到SQL:2023的最新进展进行调查时,很明显SQL经历了显著的演变。SQL标准的每一次迭代不仅应对了数据管理中出现的挑战,而且主动塑造了我们与数据的互动和思考方式。从简单的表操作到复杂的对象关系特性、高级分析能力,再到现在的基于图的查询和增强的JSON支持的集成,SQL的演变强调了其在不断变化的技术环境中的韧性和多功能性。

从简单的表操作到复杂的对象关系特性、高级分析能力,再到现在的基于图的查询和增强的JSON支持的集成,SQL的演变强调了其在不断变化的技术环境中的韧性和多功能性。这一旅程反映了为数据专业人员提供更强大、更高效、更直观的工具的持续努力。

展望未来,SQL标准可能会继续这一创新和适应的轨迹。潜在的发展方向可能包括集成向量索引,这将增强SQL处理大规模、高维数据的能力,这在机器学习和数据科学领域是常见的需求。此外,可能会更加强调对度量的支持,进一步完善SQL的分析和商业智能功能。

随着数据的体积、种类和复杂性的不断增长,SQL在管理和从这些数据中提取价值方面的作用变得越来越重要。未来的标准可能会专注于使SQL更加强大、高效,并与数据库技术和数据分析方法的最新发展保持一致。

SQL的故事是一个持续增长和适应的故事,由技术创新的无情步伐和数据管理不断扩展的前沿所驱动。展望未来,我们可以期待SQL将继续演变,保持其作为数据管理世界中的基础和不可或缺的工具的地位。

注:SQL是一门非常成功的语言,这个与早期SQL标准组织在2000年以前的工作息息相关,但从2000年后,SQL标准是落后时代的,在面向对象、XML等特性上浪费了大量的时间,很多实际需要的特性没有及时跟上,现在数据库厂商之间群雄割据,也很难统一,这个也变成了数据库各个生态的壁垒。事实上,2001年,SQL标准委员会的秘书长就开始质疑SQL标准是否还存在?

在大模型AI时代,期待SQL早点跟上向量数据库的国际标准。

参考:

https://www.coginiti.co/blog/the-evolution-of-sql-from-sql-86-to-sql-2023/

https://dba.stackexchange.com/questions/30452/ansi-iso-plans-for-limit-standardization

https://wiki.postgresql.org/images/6/64/Fosdem20150130PostgresqlTemporal.pdf

https://en.wikipedia.org/wiki/SQL-92

原文:云数据库技术

来源:一文介绍SQL标准1986~2023的演变

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

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

相关文章

vue-组件通信

组件通信是什么 组件通信就是组件与组件之间的数据传递 组件的数据是独立的&#xff0c;无法直接访问其他组件的数据 组件关系 组件关系的两大类&#xff1a; 组件A和B是非父子关系&#xff0c;组件C对于A和B是父子关系 父子通信 父组件通过props将数据传递给子组件 子组件利…

sed awk 第二版学习(六)—— 编写 awk 脚本

目录 一、awk 程序设计模型 二、模式匹配 三、记录和字段 1. 字段的引用和分离 2. 字段的划分 四、表达式 五、系统变量 1. FS、OFS、RS、ORS 2. NF 3. NR、FILENAME、FNR 4. CONVFMT、OFMT 5. 两个例子 &#xff08;1&#xff09;处理多行记录 &#xff08;2&am…

Alas配置更新器自动更新

之前我的部署方法有些问题&#xff0c;不应该下载源码再上传到服务器&#xff0c;这样会导致无法使用更新器&#xff0c;只能手动更新&#xff0c;比较麻烦&#xff0c;最近改用git方式获取源码&#xff0c;解决了无法使用更新器的问题&#xff0c;亲测有效 以下操作均基于雨云…

探索未知,惊喜连连 —— 盲盒小程序开发文案

在这个充满惊喜与好奇的时代&#xff0c;盲盒已经成为了一种独特的文化现象&#xff0c;它不仅仅是一种商品&#xff0c;更是一种心灵的慰藉和乐趣的源泉。为了满足广大盲盒爱好者的需求&#xff0c;我们精心打造了一款盲盒小程序&#xff0c;让惊喜触手可及&#xff0c;随时随…

数据库——创立表和库

数据库&#xff08;Database&#xff09;是一个用于存储、管理和检索数据的系统。它可以组织结构化数据&#xff0c;支持高效的存取和操作。数据库通常由一个数据库管理系统&#xff08;DBMS&#xff09;来支持&#xff0c;常见的DBMS包括&#xff1a; 关系数据库&#xff08;R…

如何正确的用引用作返回值?

错误一&#xff1a;引用作函数返回值&#xff0c;但函数中没用static修饰 下面代码输出什么结果&#xff1f; 输出结果&#xff1a; Q&#xff1a;ret应该是3&#xff0c;为什么再调用一次Add函数后&#xff0c;ret变成了7&#xff1f; 解释&#xff1a; ①&#xff1a;在第二…

steam上传游戏问题汇总

问题 首先是Library Logo 必须是png图片&#xff0c;还必须带上游戏名字你的宣传图不能使用游戏内部的截图。Library_Hero必须是空白的&#xff0c;不能有任何文字。他是和Library_logo合并在一起的。这个法律其实没必要填写。然后我错误的把EULA填写在这里了也报错了 如果你在…

《Linux从小白到高手》综合应用篇:详解Linux系统调优之服务器硬件优化

List item 本篇介绍Linux服务器硬件调优。硬件调优主要包括CPU、内存、磁盘、网络等关键硬件组。 1. CPU优化 选择适合的CPU&#xff1a; –根据应用需求选择多核、高频的CPU&#xff0c;以满足高并发和计算密集型任务的需求。CPU缓存优化&#xff1a; –确保CPU缓存&#x…

电容补偿功率因数不标准会怎样

电容补偿功率因数如果不符合标准&#xff0c;可能会对电力系统和设备运行造成多种负面影响。以下是功率因数补偿不当可能引发的问题&#xff1a; 1、欠补偿或不足补偿的影响 功率因数偏低&#xff1a;如果补偿量不足&#xff0c;功率因数未达到预期值&#xff08;通常在0.9至…

【C++】C++入门基础

一. 第一个C程序 #include<iostream> using namespace std;int main() {cout << "hello world" << endl;return 0; } 二.命名空间 1.namespace的价值 在C/C中&#xff0c;变量、函数和后⾯要学到的类都是⼤量存在的&#xff0c;这些变量、函数…

数据结构修炼——栈和队列是什么?如何实现?从入门到实战

目录 一、栈1 栈的概念及结构2 栈的实现 二、队列1 队列的概念及结构2 队列的实现 三、栈和队列OJ题1 有效的括号2 用队列实现栈3 用栈实现队列4 循环队列 四、概念选择题 一、栈 1 栈的概念及结构 栈&#xff1a;一种特殊的线性表。栈只允许在固定端进行插入和删除操作。进行…

专业的客服话术快捷回复软件

在当今快节奏的工作环境中&#xff0c;客服行业面临着前所未有的挑战。尤其是对于刚入行的新手小白来说&#xff0c;如何快速提升响应速度、保证回复质量&#xff0c;成为了他们亟待解决的问题。而今天&#xff0c;我要向大家推荐的这款“客服宝”快捷回复软件&#xff0c;就非…

advanced skeleton绑定模型无法返回修改按钮

有时候出现问题 adv插件没有Toggle Fit返回修改部分的按钮&#xff0c;这个通常是命名造成的 解决方式&#xff0c;把骨骼模型最上层的组名重改为Group&#xff0c;然后重开插件就行了 参考https://www.reddit.com/r/Maya/comments/xcgvcq/does_anyone_know_why_advanced_ske…

美畅物联丨破解养老难题:视频汇聚平台助力银发经济蓬勃发展

​一、引言 今天是重阳佳节&#xff0c;我们就来聊一聊视频汇聚平台在智慧养老中的应用与前景。 近年来&#xff0c;中国老龄化态势愈发严峻&#xff0c;已成为社会各界高度关注的重大课题。随着时间的推移&#xff0c;老年人口数量呈现出大规模增长的趋势&#xff0c;且独居老…

HE染色:揭示细胞细节,助力病理诊断|文献速递·24-10-11

好文分享 这篇文章是一篇关于苏木精-伊红&#xff08;H&E&#xff09;染色在诊断外科病理学中重要性的综述。 角色姓名单位第一作者John K. C. Chan香港特别行政区中国女王伊丽莎白医院 文章首先强调了尽管分子医学取得了显著进展&#xff0c;但显微镜仍然是外科病理学家日…

初阶数据结构(2):空间复杂度和复杂度算法题

Hello~,欢迎大家来到我的博客进行学习&#xff01; 目录 1.空间复杂度2. 常见复杂度对比3. 复杂度算法题3.1 旋转数组解法一解法二解法三 1.空间复杂度 根据摩尔定律&#xff0c;每隔一段时间晶体管的数量会增加一倍&#xff0c;即内存会增加&#xff0c;价格会降低。内存就不…

Windows CSC服务权限提升漏洞(CVE-2024-26229)

一、漏洞描述 csc.sys驱动程序中带有METHOD_NEITHER I/O控制代码的IOCTL地址验证不正确&#xff0c;导致任意地址写零漏洞。攻击者在Windows上获得较低权限的任意代码执行后&#xff0c;可以利用该漏洞将低权限提升至system权限。 二、漏洞详情 该漏洞源于 csc.sys 驱动程序…

Zilliz获Forrester报告全球第一;OB支持向量能力;Azure发布DiskANN;阿里云PG发布内置分析引擎

重要更新 1. Azure发布PostgreSQL向量索引扩展DiskANN&#xff0c;声称在构建HNSW/IVFFlat索引上&#xff0c;速度、精准度都超越pg_vector&#xff0c;并解决了pg_vector长期存在的偶发性返回错误结果的问题( [1] )。 2. 阿里云RDS PostgreSQL 发布AP加速引擎&#xff08;rds…

【python实操】python小程序之继承

引言 python小程序之继承 文章目录 引言一、继承1.1 概念1.1.1 基本语法1.1.2 关键点解释1.1.3 示例1.1.4 总结 1.2 题目1.3 代码1.4 代码解释1.4.1 类定义1.4.2 对象创建与方法调用1.4.3 总结 二、思考 一、继承 1.1 概念 python 中的继承是一种强大的机制&#xff0c;它允许…

如何防止webpack打包被逆向?

webpack打包后的js代码&#xff0c;看起来很混乱&#xff0c;似乎源码得到了保护&#xff1f; 不然&#xff0c;因为webpack只是将多个文件合并到了一起&#xff0c;并没有多少保护代码的功能。 比如下面这个例子&#xff0c;该网站的js文件是经webpack打包编译后生成的&…