Share via


Primaire sleutel, refererende sleutel en unieke sleutel met behulp van een toegewezen SQL-pool in Azure Synapse Analytics

Meer informatie over tabelbeperkingen in toegewezen SQL-pool, waaronder primaire sleutel, refererende sleutel en unieke sleutel.

Tabelbeperkingen

Toegewezen SQL-pool ondersteunt deze tabelbeperkingen:

  • PRIMAIRE SLEUTEL wordt alleen ondersteund wanneer NIET-GECLUSTERD en NIET AFGEDWONGEN beide worden gebruikt.
  • DE BEPERKING UNIEK wordt alleen ondersteund wanneer NIET AFGEDWONGEN wordt gebruikt.

Schakel ALTER TABLE en CREATE TABLE in voor syntaxis.

BEPERKING VOOR REFERERENDE SLEUTEL wordt niet ondersteund in een toegewezen SQL-pool.

Opmerkingen

Als u een primaire sleutel en/of unieke sleutel hebt, kan de toegewezen SQL-poolengine een optimaal uitvoeringsplan voor een query genereren. Alle waarden in een primaire-sleutelkolom of een unieke beperkingskolom moeten uniek zijn.

Belangrijk

Na het maken van een tabel met de primaire sleutel of unieke beperking in een toegewezen SQL-pool, moeten gebruikers ervoor zorgen dat alle waarden in deze kolommen uniek zijn. Een schending van dat kan ertoe leiden dat de query onnauwkeurig resultaat retourneert.

Dit voorbeeld laat zien hoe een query onnauwkeurig resultaat kan retourneren als de primaire sleutel of de unieke beperkingskolom dubbele waarden bevat.

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

Voorbeelden

Maak een toegewezen SQL-pooltabel met een primaire sleutel:

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

Maak een toegewezen SQL-pooltabel met een unieke beperking:

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

Volgende stappen

Nadat u de tabellen voor uw toegewezen SQL-pool hebt gemaakt, is de volgende stap het laden van gegevens in de tabel. Zie Gegevens laden in een toegewezen SQL-pool voor een zelfstudie over het laden.