Udostępnij za pośrednictwem


Klucz podstawowy, klucz obcy i unikatowy klucz przy użyciu dedykowanej puli SQL w usłudze Azure Synapse Analytics

Dowiedz się więcej na temat ograniczeń tabeli w dedykowanej puli SQL, w tym klucza podstawowego, klucza obcego i unikatowego klucza.

Ograniczenia tabeli

Dedykowana pula SQL obsługuje następujące ograniczenia tabeli:

  • KLUCZ PODSTAWOWY jest obsługiwany tylko wtedy, gdy są używane zarówno elementy NONCLUSTERED, jak i NIE SĄ WYMUSZANE.
  • Ograniczenie UNIQUE jest obsługiwane tylko wtedy, gdy nie jest używana wartość WYMUSZAna.

Aby uzyskać składnię, sprawdź POLECENIE ALTER TABLE i CREATE TABLE.

Ograniczenie KLUCZA OBCEgo nie jest obsługiwane w dedykowanej puli SQL.

Uwagi

Posiadanie klucza podstawowego i/lub unikatowego klucza umożliwia dedykowany aparat puli SQL generowanie optymalnego planu wykonywania zapytania. Wszystkie wartości w kolumnie klucza podstawowego lub unikatowej kolumnie ograniczenia powinny być unikatowe.

Ważne

Po utworzeniu tabeli z kluczem podstawowym lub unikatowym ograniczeniem w dedykowanej puli SQL użytkownicy muszą upewnić się, że wszystkie wartości w tych kolumnach są unikatowe. Naruszenie tego problemu może spowodować zwrócenie niedokładnego wyniku zapytania.

W tym przykładzie pokazano, jak zapytanie może zwrócić niedokładny wynik, jeśli klucz podstawowy lub unikatowa kolumna ograniczenia zawiera zduplikowane wartości.

 -- 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 constraint
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)
*/

Przykłady

Utwórz dedykowaną tabelę puli SQL z kluczem podstawowym:

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

Utwórz dedykowaną tabelę puli SQL z unikatowym ograniczeniem:

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

Następne kroki

Po utworzeniu tabel dla dedykowanej puli SQL następnym krokiem jest załadowanie danych do tabeli. Aby zapoznać się z samouczkiem dotyczącym ładowania, zobacz Ładowanie danych do dedykowanej puli SQL.