2

我有一个 MySQL 表,其中包含两个字段:a (int) 和 b (string) 使用 InnoDB 引擎。

我想对其进行结构化,以便特定的 b 值可以在表中出现任意次数,但每次出现时它必须始终以相同的 a 值出现,即假设我的表如下所示:

(a,b)
(1,'foo')
(2,'bar')
(2,'bar')
(2,'baz')

我应该能够成功地将 (1,'foo'), (2,'bar') 甚至 (2,'qux') 插入到表中,但是插入 (2,'foo'), (1,' bar') 或 (1,'baz') 应该失败,因为无论何时出现 b 的这些字符串值,它们都应该始终以相同的 a 值出现。

任何想法如何有效地做到这一点?我一直在玩交易,SELECT ... FOR UPDATE但没有运气。我有错误的表结构吗?

4

2 回答 2

1

我最终使用了如下语句:

 INSERT INTO mytable(`a`,`b`) SELECT 1,'foo' FROM dual WHERE NOT EXISTS
 (SELECT * FROM mytable WHERE a != 1 AND b = 'foo')

如果嵌套选择不返回任何行,它只会插入一行。

于 2011-05-23T20:48:58.307 回答
0

怎么样

如果存在(从 mytable 中选择 null,其中 a!=prm_a 和 b=prm_b)然后插入 ... else raise end;

?

于 2011-05-18T13:35:29.707 回答