SET 列上 DML 操作中的重复元素

SET 数据类型不允许在同一集合中有重复的元素值。如果您尝试将重复的元素插入到 SET 数据类型内,或将 SET 列或变量更新为包括重复的元素的值,则当执行 INSERT 或 UPDATE 语句时,数据库服务器不发出错误或警告,但在 SET 列或变量中仅存储重复的元素之一。

例如,假如您以 SET 数据类型的列 a 创建表 t3,然后您插入四行,其中一些包括有相同的值的元素:
  > CREATE TABLE t3(a SET(INT NOT NULL));
        
        Table created.  
        
        > INSERT INTO t3 VALUES( SET{10, 20, 30} );
        
        1 row(s) inserted.  
        
        > INSERT INTO t3 VALUES( SET{10, 20, 10});
        
        1 row(s) inserted.  
        
        > INSERT INTO t3 VALUES( SET{10, 10, 10});
        
        1 row(s) inserted.  
        
        > INSERT INTO t3 VALUES( SET{10,10,10});
        
        1 row(s) inserted. 
当您查看插入到列 t3.a 内的那些数据值时,插入的四行不包括重复的元素值:
> SELECT * FROM t3;
        
        a  SET{10         ,20         ,30         }  
        a  SET{10         ,20         }
        a  SET{10         }
        a  SET{10         }
        
        4 row(s) retrieved.

在此示例中, GBase 8s 静默地从为每一 SET 值指定的 INSERT 语句的 VALUES 子句的元素中舍弃一个实例之外的所有重复的元素。

如果 UPDATE 语句的 SET 子句在同一 SET 值内包括重复的元素,则会发生类似的行为。如果您想要数据库存储可在同一集合内包括重复的元素的无序集,则请声明 MULTISET 数据类型的集合列,而不是 SET 数据类型的。