仅在记录尚不存在时插入行

时间:2013-01-30 20:24:15

标签: mysql sql insert

该表名为limits,并采用以下字段:

id    |    ip    |    limit

在每个页面加载时,我正在检查用户是否在此表中有记录(由ip确定),如果他们没有,我插入一条记录。但是,如果记录已经存在,我不想做任何事情。

我基本上需要一个INSERT IF NOT EXISTS类型的查询。我已经阅读this并且INSERT IGNORE示例看起来不错,但据我所知它只适用于主键。在我的情况下,id字段是主键,我想检查ip是否已经存在。

这是某种伪SQL代码:

INSERT INTO `limits` (ip, limit)
VALUES ('127.0.0.1', 8)
IF NOT EXISTS `limits`.`ip`

感谢您的帮助!

编辑:尝试过这个

INSERT IGNORE INTO `limits`
SET `ip` = ‘127.0.0.1′,
`limit` = 8;

2 个答案:

答案 0 :(得分:2)

INSERT IGNORE将忽略任何唯一索引,无论它是主键还是任何唯一键。

您可以使用

在IP上创建唯一键
ALTER TABLE limits
  ADD CONSTRAINT idx_limits_ip
  UNIQUE (ip)

Manual有一些替代语法来创建索引。

答案 1 :(得分:0)

INSERT INTO `limits` (ip, limit)
SELECT '127.0.0.1', 8
WHERE NOT EXISTS (SELECT * FROM `limits` WHERE `limits`.`ip` =  '127.0.0.1')