看起来非常简单,但我已经尝试了我能在这里找到的所有内容并且一直收到错误#1064 - 您的SQL语法出错;
每次用户访问该页面时,我都想更新名为range_views的表
INSERT INTO range_views (range_id, ip_address, view_date) values('112','123.123.123.123','2015-02-01')
WHERE NOT EXISTS ( SELECT * FROM range_views
WHERE range_id = '112'
AND ip_address = '123.123.123.123'
AND view_date = '2015-02-01');
该表有4列
id - AUTO_INCREMENT
range_id - INT(6)
ip_address - VARCHAR(15)
view_date - VARCHAR(10)
答案 0 :(得分:4)
此语法无效。您必须使用语法INSERT INTO ... SELECT
重写它,如下所示:
INSERT INTO range_views (range_id, ip_address, view_date)
SELECT '112', '123.123.123.123', '2015-02-01'
FROM range_views
WHERE NOT EXISTS(SELECT * FROM range_views
WHERE range_id = '112'
AND ip_address = '123.123.123.123'
AND view_date = '2015-02-01');
答案 1 :(得分:1)
在列UNIQUE INDEX
,range_id
,ip_address
上创建view_date
:
ALTER TABLE range_views
ADD UNIQUE INDEX id_ip_date(range_id, ip_address, view_date);
无论如何你需要这个索引;只有在表中尚不存在(range_id
,ip_address
,view_date
)对的值时,它才会强制执行添加新条目的规则。
然后INSERT
值并添加IGNORE
:
INSERT IGNORE INTO range_views(range_id, ip_address, view_date)
VALUES('112','123.123.123.123','2015-02-01');
如果使用
IGNORE
关键字,则会忽略执行INSERT
语句时发生的错误。例如,如果没有IGNORE
,则复制表中现有UNIQUE
索引或PRIMARY KEY
值的行会导致重复键错误,并且语句将中止。使用IGNORE
,该行将被丢弃,并且不会发生错误。忽略的错误会生成警告。