您的当前位置:首页正文

各SQL 标准版本整理汇总——更新至SQL:2019

2024-11-17 来源:个人技术集锦

记录一下:了解SQL 标准各版本的发展与特性,在实际使用中,需要根据具体的数据库管理系统和版本来了解其对 各SQL标准 的支持程度,以便我们在开发过程中决策如何正确规范地使用SQL语句。

一 版本汇总

1986,SQL -86,SQL-86 标准的发布标志着 SQL 成为关系数据库管理系统的标准语言,为后来 SQL 语言的发展奠定了基础。

1989,SQL-89,SQL-89 标准的发布进一步推动了 SQL 语言的发展和应用,为后续版本的 SQL 标准奠定了基础。

1992,SQL-92,SQL-92 标准在 1992 年发布时,引入了更多革命性的特性,如明确的 JOIN 语法、外连接、集合操作等,这些特性极大地丰富了 SQL 语言的表达能力,使得 SQL-92 成为了更广泛采用的标准。

1999,SQL:1999,SQL:1999 标准是 SQL 语言发展史上的一个重要转折点,它不仅增强了 SQL 语言的功能,还为数据库技术的未来发展奠定了基础。

2003,SQL:2003,SQL:2003 标准的发布进一步丰富了 SQL 语言的功能,使得数据库管理系统具备了更多强大的能力。但并非所有数据库产品都完全支持 SQL:2003 标准的所有特性。

2008,SQL:2008,SQL:2008 标准继续沿用了 SQL:2003 的模块化结构,将标准分为多个部分,包括但不限于基础、数据定义语言(DDL)、数据操纵语言(DML)、数据控制语言(DCL)等。

2016,SQL:2016,SQL:2016 标准是 SQL 语言发展的重要里程碑,它通过引入新特性和改进,使得 SQL 语言更加强大和灵活,能够更好地满足现代数据库应用的需求。

2019,SQL:2019,SQL:2019 标准的发布进一步丰富了 SQL 语言的功能,为数据库管理系统提供了更多强大的能力。

二  SQL-92 标准

 如图所示,SQL-92标准是最早的被各数据库管理产品广泛支持的版本,因此罗列部分使用规范。

1. JOIN 

  •  内连接(INNER JOIN)
SELECT table1.*,table2.*
FROM table1
INNER JOIN table2 ON table1.id = table2.id;
  • 左外连接(LEFT OUTER JOIN)
SELECT table1.*,table2.*
FROM table1
LEFT OUTER JOIN table2 ON table1.id = table2.id;
  • 右外连接(RIGHT OUTER JOIN)
SELECT table1.*,table2.*
FROM table1
RIGHT OUTER JOIN table2 ON table1.id = table2.id;
  • 全外连接(FULL OUTER JOIN)
SELECT table1.*,table2.*
FROM table1
FULL OUTER JOIN table2 ON table1.id = table2.id;

2. 事务

SQL-92 标准定义了事务的基本组成,事务是数据库操作的一个单元,可以包含一个或多个 SQL 语句。事务的目的是确保数据库状态从一个一致的状态转移到另一个一致的状态。SQL-92 事务通常由以下几个部分组成:

  • 1. 开始事务(BEGIN TRANSACTION)
  • 2. 执行 SQL 语句:在事务中可以执行多个 SQL 语句,包括 `SELECT`、`INSERT`、`UPDATE`、`DELETE` 等,这些语句对数据库中的数据进行查询或修改。
  • 3. 提交事务(COMMIT):使用 `COMMIT;` 命令来提交事务。一旦事务被提交,所有在事务中执行的 SQL 语句更改将被永久保存到数据库中,并且对其他事务可见。
  • 4. 回滚事务(ROLLBACK): 如果事务中的操作需要撤销,可以使用 `ROLLBACK;` 命令来回滚事务。这将撤销事务中所有已经执行的 SQL 语句,使得数据库状态回到事务开始之前。
  • 5. 保存点(Savepoints, SAVEPOINT):在某些数据库系统中,可以在事务中设置保存点,这样可以选择性地回滚到特定的保存点,而不是整个事务。
  • 6. 事务的隔离级别:SQL-92 标准定义了不同的事务隔离级别,用于处理并发事务中的一些问题,如脏读、不可重复读和幻读。隔离级别可以通过 `SET TRANSACTION` 语句来设置。
  • 7. 结束事务:事务通常在提交或回滚后结束。在某些数据库系统中,提交或回滚后事务自动结束,而在其他系统中可能需要显式地结束事务。

事务的这些组成部分确保了数据库操作的原子性、一致性、隔离性和持久性(ACID 属性)。通过使用事务,数据库管理系统可以维护数据的完整性,即使在发生错误或系统故障的情况下也是如此。

以下是一个简单的 SQL-92 标准事务示例:

BEGIN TRANSACTION;											--开始新事务
create table testtb										    --创建表testtb
(
	id int,
	colkey varchar(10),
	colvalue varchar(20)
)

insert into testtb											--Insert 插入测试数据
values(1,'testA','10')
insert into #testtb
values(2,'testB','20')

UPDATE testtb SET colvalue = colvalue - 1 WHERE id = 1;    --Update 更新表数据
UPDATE testtb SET colvalue = colvalue + 2 WHERE id = 2;    --更新表数据

select id,colkey,colvalue from  testtb						--select 查看更新结果
drop table testtb											--用后销毁表

COMMIT;														--提交事务使更改生效

以上实例中,如果事务中的任何一个 SQL 语句失败,整个事务将被回滚(Rollback),以确保数据的一致性。

手动回滚事务示例(可以在条件判断或异常控制流程中使用):

begin TRANSACTION
    UPDATE testtb SET colvalue = 100 WHERE id = 1;	
rollback; 

SQL-92 标准定义了事务的隔离级别,以控制并发事务中的一些问题,如脏读(Dirty Read)、不可重复读(Non-repeatable Read)和幻读(Phantom Read)。隔离级别的设置可以防止这些问题的发生,但可能会对性能产生影响。

具体的事务语法可能会根据不同的数据库系统有所不同。上面的示例是通用的 SQL 语法,但某些数据库系统可能有自己的事务开始和结束的语法。

显示全文