Mysql对两列不相关顺序的唯一约束

卢克施

假设我有一个“游戏”表,其中有2对参与者:

id | make | party1_id | party2_id

现在,我要像这样填写表格:

INSERT INTO game (party1_id, party2_id) VALUES (1, 2); -- OK
INSERT INTO game (party1_id, party2_id) VALUES (4, 3); -- OK
INSERT INTO game (party1_id, party2_id) VALUES (2, 4); -- OK
INSERT INTO game (party1_id, party2_id) VALUES (2, 1); -> should fail

上一次尝试应该失败,因为具有两个参与者的游戏已经存在,尽管玩家顺序不同。我不能强迫表按id的顺序保存party1_id和party2_id,因为它们有一定的含义(主场球员还是客场球员)。

所以问题是,我们可以在MySQL中创建UNIQUE约束吗?

到目前为止,我认为我可以创建一个生成的列,其中两个id都以连接字符串的升序排列,并在它们上放置一个唯一索引(例如,第一行为“ 1_2”)。但是,这似乎有点尴尬。

我看到了与此有关的另一个问题,但这不适用于MySQL。

哈维尔·鲁伊斯(Javier Ruiz)

我不知道此触发器是否可以解决问题:

CREATE TABLE game(
party1_id INTEGER,
party2_id INTEGER,
CONSTRAINT p12_unique UNIQUE (party1_id, party2_id));

CREATE TRIGGER no_way BEFORE insert ON game
BEGIN
  SELECT RAISE(ABORT, 'There can be only one.')
  WHERE EXISTS (SELECT 1
                  FROM game
                  WHERE 
                  party1_id = new.party2_id AND 
                  party2_id = new.party1_id);
END;


/* Create few records in this table */
INSERT INTO game (party1_id, party2_id) VALUES (1, 2);
INSERT INTO game (party1_id, party2_id) VALUES (4, 3);
INSERT INTO game (party1_id, party2_id) VALUES (2, 4);
INSERT INTO game (party1_id, party2_id) VALUES (1, 2); /* fail */
INSERT INTO game (party1_id, party2_id) VALUES (2, 1); /* fail */
INSERT INTO game (party1_id, party2_id) VALUES (4, 2); /* fail */

COMMIT;

/* Display all the records from the table */
SELECT * FROM game;

它在sqlite中进行了测试,因为我没有方便的mysql机器...我希望它可以在mysql中工作。

最好...

ps星期四见!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

两列唯一约束ActiveAndroid

来自分类Dev

两列组合的唯一约束?

来自分类Dev

MySQL-列组合的唯一约束:避免错误?

来自分类Dev

MySQL-列组合的唯一约束:避免错误?

来自分类Dev

从两个不相关的表中选择不相关的列

来自分类Dev

外键列的唯一约束

来自分类Dev

序列列的唯一约束

来自分类Dev

外键列的唯一约束

来自分类Dev

glDeleteShader-顺序不相关吗?

来自分类Dev

在PHP的mysql数据库中减去两个不相关表的两列之和

来自分类Dev

在不违反唯一约束的情况下在MySQL中交换两行的值?

来自分类Dev

SQLAlchemy和MySQL中一对多关系中列的唯一约束

来自分类Dev

对两个字段的唯一约束,相反的

来自分类Dev

如何在mysql中的2列之间有2路唯一约束

来自分类Dev

违反唯一约束

来自分类Dev

放下唯一约束

来自分类Dev

选择一个不相关的子集,但要受约束

来自分类Dev

MySQL创建具有唯一约束的表

来自分类Dev

MySQL唯一约束允许单行组合

来自分类Dev

如何删除Mysql中的唯一约束?

来自分类Dev

MySQL:对行组合设置唯一约束的问题

来自分类Dev

MySQL唯一约束允许单行组合

来自分类Dev

MySQL用唯一约束替换为行为

来自分类Dev

mysql连接不相关的表

来自分类Dev

仅在子类上为列添加唯一约束

来自分类Dev

多列的唯一约束-允许单个null

来自分类Dev

如何定义三列的唯一约束?

来自分类Dev

grails / gorm多列唯一约束违反

来自分类Dev

SQL Server 2008:与列无关的值的唯一约束