2011-05-18 116 views
2

我有一個MySQL表,其中包含兩個字段:使用InnoDB引擎的a(int)和b(字符串)。MySQL密鑰約束

我想構造它,以便b的特定值可以在表中出現任意次數,但每次出現時它必須總是以相同的值出現,即假設我的表如下所示:

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

我應該能夠成功地插入(1, '富'),(2, '巴')或甚至(2, 'qux')到表中,但是插入物(2,'富'),(1,'bar')或(1,'baz')應該失敗,因爲每當b的字符串值出現時,它們總是應該以相同的值出現。

任何想法如何有效地做到這一點?我一直在玩交易和SELECT ... FOR UPDATE,但沒有運氣。我有錯誤的表格結構嗎?

+0

也許創建一個表具有哪些值必須與哪些ints? – AllisonC 2011-05-18 13:36:11

回答

1

我結束了使用如下語句:

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

這隻會插入一行,如果嵌套查詢返回任何行。

0

什麼樣的財產以後

如果存在(選擇MYTABLE空,其中a = prm_a和b = prm_b!)然後 插入... 其他 提高 結束;