Tidak kira baris, adalah satu-satunya lajur
P粉378264633
P粉378264633 2023-09-03 17:26:33
0
2
458
<p>Adakah terdapat cara untuk menjadikan keseluruhan baris unik tanpa mengira nilai dalam lajur? </p> <p>Jadi, jika lajur <kod>a</kod> mempunyai <kod>1</kod>, lajur <kod>b</kod>2</kod> jika anda memasukkan <kod>2</kod> ke dalam lajur <kod>a</kod>, masukkan <kod>1</kod> dilemparkan. </p> <pre class="brush:none;toolbar:false;">+---+---+ |. a | +---+---+ |. 1 | |. 2 |. 1 | +---+---+ </pra></p>
P粉378264633
P粉378264633

membalas semua(2)
P粉146080556

Anda boleh menggunakan pencetus untuk menguatkuasakan pelaksanaan. Tetapi saya tidak dapat memikirkan cara yang baik untuk mencapai ini menggunakan kekangan UNIQUE KEY.

Jika anda menukar cara anda menyimpan nilai supaya ia berada dalam satu lajur, dalam berbilang baris jadual yang dilampirkan, lebih mudah untuk menggunakan UNIQUE KEY untuk menguatkuasakan keunikan.


Jika anda ingin menunjukkan item berkaitan:

CREATE TABLE item_group (
  group_id INT AUTO_INCREMENT PRIMARY KEY
);

CREATE TABLE item_group_members (
  group_id INT NOT NULL,
  member_id INT NOT NULL,
  PRIMARY KEY (group_id, member_id)
);

INSERT INTO item_group_members VALUES (1, 1), (1, 2);

Jika anda memerlukan setiap ahli untuk muncul dalam satu kumpulan sahaja:

ALTER TABLE item_group_members ADD UNIQUE KEY (member_id);
P粉186017651

Tentukan 2 lajur terhasil maya, minimum dan maksimum, dan tetapkan kekangan unik padanya:

CREATE TABLE tablename (
  a INT NOT NULL, 
  b INT NOT NULL,
  x INT GENERATED ALWAYS AS (LEAST(a, b)),
  y INT GENERATED ALWAYS AS (GREATEST(a, b)),
  UNIQUE (x, y)
);

Lihat Demo.

Atau, untuk MySql 8.0+:

CREATE TABLE tablename (
  a INT NOT NULL, 
  b INT NOT NULL,
  UNIQUE ((LEAST(a, b)), (GREATEST(a, b))) -- 不要忘记括号 
);

Lihat Demo.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!