我尝试了以下查询:
INSERT INTO `chat_lines` (`channel`, `nick`, `value`)
VALUES ('Alfa', 'Beta', '0')
WHERE NOT EXIST
(
SELECT *
FROM `chat_lines`
WHERE `channel` = 'Alfa' AND `nick` = 'Beta'
);
如果记录不存在,我该如何插入?
频道和昵称不能是唯一的, 因为一个频道可以有很多刻痕的记录 一个昵称可以有很多频道。
类似的东西:
(Alfa | Alfa)
(Alfa | Beta)
(Beta | Alfa)
(Beta | Beta).
所以,我不希望有两个相同的记录,如
(Alfa|Beta)(Alfa|Beta).
或许还有其他方法可以解决我的问题? 我只想创建具有特定缺口和频道的记录 如果它不存在,如果它存在, 我想提高价值。
@edit
我尝试使用REPLACE
。有用。但是......我想改变value = value + 1
。它只能在UPDATE
AFAIK中使用。我该怎么办?
答案 0 :(得分:3)
如果每对value
只需要一个(nick, channel)
,请先在此对上创建一个唯一索引:
CREATE UNIQUE INDEX `chat_lines_by_nick_channel`
ON `chat_lines` (`nick`, `channel`);
这使得您可以为这些字段添加值('Staisy', 'nesdev')
,('Milo', 'nesdev')
和('Milo', 'fireworks')
的行,而不是具有('Milo', 'fireworks')
的两个单独行。
然后,您可以使用ON DUPLICATE KEY UPDATE
让MySQL更改value
而不是插入新行,或INSERT IGNORE INTO chat_lines
在尝试插入新行时保持不变。例如,如果要将{1}添加到value
,则可以执行以下操作:
INSERT INTO chat_lines (`nick`, `channel`, `lines`)
VALUES ('Chester', 'orchard', 1)
ON DUPLICATE KEY UPDATE `value` = `value` + 1
如果没有符合('Chester', 'orchard')
的行,则会添加新行。否则,它会在现有行的value
中添加1。
另见:
答案 1 :(得分:1)
简单地做
INSERT IGNORE INTO `chat_lines` (`channel`, `nick`, `value`)
VALUES ('Alfa', 'Beta', '0');
另见INSERT...ON DUPLICATE KEY UPDATE...
(不相关,但相似)。