我正在尝试在输入新数据和避免参与者之前检查数据库表中的数据。
$sqlQuery = "INSERT INTO " . $table . " ( " . $columns . ") VALUES( '" . $columnData . "')
SELECT " . $columnData . " FROM " . $columns . "
WHERE NOT EXISTS (SELECT '" .$columnData . "'
FROM " . $table . " WHERE '" . $columnData . "' = '" . $columnData . "')";
虽然查询没有按预期执行,但查询不会抛出任何错误。
提前致谢
答案 0 :(得分:1)
要避免重复输入,请使用INSERT IGNORE
如果要在重复使用Insert ... ON DUPLICATE KEY UPDATE...
答案 1 :(得分:1)
我给你的所有条件的例子请检查
第一步是在表格上设置唯一键:
ALTER TABLE thetable ADD UNIQUE INDEX(pageid, name);
然后你必须决定在复制时你想做什么。你应该:
忽略它?
INSERT IGNORE INTO thetable (pageid, name) VALUES (1, "foo"), (1, "foo");
Overwrite the previously entered record?
INSERT INTO thetable (pageid, name, somefield)
VALUES (1, "foo", "first")
ON DUPLICATE KEY UPDATE (somefield = 'first')
INSERT INTO thetable (pageid, name, somefield)
VALUES (1, "foo", "second")
ON DUPLICATE KEY UPDATE (somefield = 'second')
Update some counter?
INSERT INTO thetable (pageid, name)
VALUES (1, "foo"), (1, "foo")
ON DUPLICATE KEY UPDATE (pagecount = pagecount + 1)
答案 2 :(得分:1)
如果您想避免重复,请在您想要唯一的列上创建唯一约束或索引:
create unique index idx_table_cols on table(col1, col2, . . .);
然后数据库将防止重复。如果您希望insert
以静默方式失败而不是生成错误,可以使用insert ignore
,但我建议insert on duplicate key update
:
insert into table(col1, col2, . . .)
select <values>
from . . .
on duplicate key update col1 = values(col1);