在 Azure Synapse Analytics 中使用專用 SQL 集區的主索引鍵、外部索引鍵和唯一索引鍵

了解專用 SQL 集區中的資料表條件約束,包括主索引鍵、外部索引鍵和唯一索引鍵。

資料表條件約束

專用 SQL 集區支援下列資料表條件約束:

  • 只有在 NONCLUSTERED 與 NOT ENFORCED 同時使用時,才支援 PRIMARY KEY。
  • 只在使用 NOT ENFORCED 時支援 UNIQUE 限制式。

如需語法,請檢查 ALTER TABLECREATE TABLE

專用 SQL 集區中不支援 FOREIGN KEY 條件約束。

備註

擁有主索引鍵和/或唯一索引鍵可讓專用 SQL 集區引擎產生查詢的最佳執行計劃。 主索引鍵資料行或唯一條件約束資料行中的所有值都應該是唯一的。

重要

在專用 SQL 集區中建立具有主索引鍵或唯一條件約束的資料表之後,使用者必須確保這些資料行中的所有值都是唯一的。 違規可能會導致查詢傳回不正確的結果。

此範例顯示如果主索引鍵或唯一條件約束資料行包含重複值,查詢可能會傳回不正確的結果。

 -- Create table t1
CREATE TABLE t1 (a1 INT NOT NULL, b1 INT) WITH (DISTRIBUTION = ROUND_ROBIN)

-- Insert values to table t1 with duplicate values in column a1.
INSERT INTO t1 VALUES (1, 100)
INSERT INTO t1 VALUES (1, 1000)
INSERT INTO t1 VALUES (2, 200)
INSERT INTO t1 VALUES (3, 300)
INSERT INTO t1 VALUES (4, 400)

-- Run this query.  No primary key or unique constraint.  4 rows returned. Correct result.
SELECT a1, COUNT(*) AS total FROM t1 GROUP BY a1

/*
a1          total
----------- -----------
1           2
2           1
3           1
4           1

(4 rows affected)
*/

-- Add unique constraint
ALTER TABLE t1 ADD CONSTRAINT unique_t1_a1 unique (a1) NOT ENFORCED

-- Re-run this query.  5 rows returned.  Incorrect result.
SELECT a1, count(*) AS total FROM t1 GROUP BY a1

/*
a1          total
----------- -----------
2           1
4           1
1           1
3           1
1           1

(5 rows affected)
*/

-- Drop unique constraint.
ALTER TABLE t1 DROP CONSTRAINT unique_t1_a1

-- Add primary key constraint
ALTER TABLE t1 add CONSTRAINT PK_t1_a1 PRIMARY KEY NONCLUSTERED (a1) NOT ENFORCED

-- Re-run this query.  5 rows returned.  Incorrect result.
SELECT a1, COUNT(*) AS total FROM t1 GROUP BY a1

/*
a1          total
----------- -----------
2           1
4           1
1           1
3           1
1           1

(5 rows affected)
*/

-- Manually fix the duplicate values in a1
UPDATE t1 SET a1 = 0 WHERE b1 = 1000

-- Verify no duplicate values in column a1 
SELECT * FROM t1

/*
a1          b1
----------- -----------
2           200
3           300
4           400
0           1000
1           100

(5 rows affected)
*/

-- Add unique constraint
ALTER TABLE t1 add CONSTRAINT unique_t1_a1 UNIQUE (a1) NOT ENFORCED  

-- Re-run this query.  5 rows returned.  Correct result.
SELECT a1, COUNT(*) as total FROM t1 GROUP BY a1

/*
a1          total
----------- -----------
2           1
3           1
4           1
0           1
1           1

(5 rows affected)
*/

-- Drop unique constraint.
ALTER TABLE t1 DROP CONSTRAINT unique_t1_a1

-- Add primary key contraint
ALTER TABLE t1 ADD CONSTRAINT PK_t1_a1 PRIMARY KEY NONCLUSTERED (a1) NOT ENFORCED

-- Re-run this query.  5 rows returned.  Correct result.
SELECT a1, COUNT(*) AS total FROM t1 GROUP BY a1

/*
a1          total
----------- -----------
2           1
3           1
4           1
0           1
1           1

(5 rows affected)
*/

範例

使用主索引鍵建立專用 SQL 集區資料表:

CREATE TABLE mytable (c1 INT PRIMARY KEY NONCLUSTERED NOT ENFORCED, c2 INT);

使用唯一條件約束建立專用 SQL 集區資料表:

CREATE TABLE t6 (c1 INT UNIQUE NOT ENFORCED, c2 INT);

下一步

在為您的專用 SQL 集區建立資料表之後,下一步是將資料載入至資料表。 如需載入教學課程,請參閱將資料載入至專用 SQL 集區