Heim  >  Fragen und Antworten  >  Hauptteil

Unabhängig von der Zeile ist es die einzige Spalte

<p>Gibt es eine Möglichkeit, die gesamte Zeile unabhängig vom Wert in der Spalte eindeutig zu machen? </p> <p>Wenn also die Spalte <code>a</code> <code>1</code> hat, dann hat die Spalte <code>b</code> Wenn Sie <code>2</code> in die Spalte <code>a</code> einfügen, wird ein Fehler angezeigt geworfen. </p> <pre class="brush:none;toolbar:false;">+---+---+ |. a |. b | +---+---+ |. 1 |. 2 | |. 2 |. 1 |- Da das obige bereits vorhanden ist, wird beim Einfügen ein Fehler ausgegeben +---+---+ </pre></p>
P粉378264633P粉378264633413 Tage vor459

Antworte allen(2)Ich werde antworten

  • P粉146080556

    P粉1460805562023-09-04 12:21:14

    你可以使用触发器来强制执行。但是我想不出一种好的方法来使用UNIQUE KEY约束来实现这一点。

    如果你改变存储值的方式,使它们位于单个列中,位于附加表的多行中,那么使用UNIQUE KEY来强制唯一性将更容易。


    如果你想表示相关的项目:

    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);

    如果你需要每个成员只出现在一个组中:

    ALTER TABLE item_group_members ADD UNIQUE KEY (member_id);

    Antwort
    0
  • P粉186017651

    P粉1860176512023-09-04 11:25:21

    定义2个虚拟生成列,分别为最小值和最大值,并在它们上设置唯一约束:

    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)
    );

    查看演示

    或者,对于MySql 8.0+:

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

    查看演示

    Antwort
    0
  • StornierenAntwort