mysql - 插入记录和忽略的 SQL 语法存在索引而不是主键

标签 mysql sql

我有一个结构表:id(INT, PK), entryid(INT), date(INT), region(CHAR), location(ENUM), views(INT)。除 id 之外的所有字段都是非唯一的。

如何插入一条记录,如果有相同的entryid,date,region,location,则忽略,否则插入到表中?

顺便说一句,我正在使用 mysql。

最佳答案

是的,在 mysql 中有一个特殊版本的插入语句:

INSERT INTO table
VALUES (...)
ON DUPLICATE KEY UPDATE entryid = ?, etc -- this modifier will do the trick

咨询the mysql manual entry for this syntax完整的解释

编辑:

此行为适用于相同的主键。为了让它在多列上工作,您需要一个多列主键,您可以像这样为您的表定义它:

create table mytable (
    entryid int,
    date int,
    region char,
    location enum ('a', 'b', 'c'),
    views int,
    primary key (entryid, date, region, location) -- list your key field like this
);
   

关于mysql - 插入记录和忽略的 SQL 语法存在索引而不是主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8794784/

相关文章:

php - 用PHP同时连接和查询两个Mysql数据库

php - 脚本中存在多个 PDO 实例?

html - 适用于 HTML 和文本的回车符

sql - Oracle MERGE 死锁

sql - HAVING 和 GROUP BY

sql - 在mysql中设计动态键值对的最佳方法是什么?

mysql - 如何一次性加载 40 亿条记录,从 MySQL 到 SQL Server

mysql - 如何将连接查询的两行输出合并为一行?

php - 在数据库中保存数据时,Doctrine 将 UTF8 编码更改为 html 实体

sql - 多个表中的唯一 ID [MySQL]