Heim > Fragen und Antworten > Hauptteil
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);
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))) -- 不要忘记括号 );
查看演示。