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