Bagikan melalui


Kunci primer, kunci asing, dan kunci unik menggunakan kumpulan SQL khusus di Azure Synapse Analytics

Pelajari tentang batasan tabel di kumpulan SQL khusus, termasuk kunci primer, kunci asing, dan kunci unik.

Batasan tabel

Kumpulan SQL khusus mendukung batasan tabel ini:

  • KUNCI PRIMER hanya didukung ketika kedua TIDAK DIKLUSTERKAN dan TIDAK DIBERLAKUKAN digunakan.
  • Batasan UNIQUE hanya didukung ketika NOT ENFORCED digunakan.

Untuk sintaks, periksa UBAH TABEL dan BUAT TABEL.

Batasan KUNCI ASING tidak didukung di kumpulan SQL khusus.

Keterangan

Memiliki kunci primer dan/atau kunci unik memungkinkan mesin kumpulan SQL khusus menghasilkan rencana eksekusi yang optimal untuk kueri. Semua nilai dalam kolom kunci primer atau kolom batasan unik harus unik.

Penting

Setelah membuat tabel dengan kunci primer atau batasan unik di kumpulan SQL khusus, pengguna perlu memastikan semua nilai dalam kolom tersebut unik. Pelanggaran yang dapat menyebabkan kueri mengembalikan hasil yang tidak akurat.

Contoh ini memperlihatkan bagaimana kueri dapat mengembalikan hasil yang tidak akurat jika kunci primer atau kolom batasan unik yang menyertakan nilai duplikat.

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

Contoh

Buat tabel kumpulan SQL khusus dengan kunci primer:

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

Buat tabel kumpulan SQL khusus dengan batasan unik:

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

Langkah berikutnya

Setelah membuat tabel untuk kumpulan SQL khusus Anda, langkah selanjutnya adalah memuat data ke dalam tabel. Untuk tutorial pemuatan, lihat Memuat data ke kumpulan SQL khusus.