当某些行已经存在时如何防止SQL插入? [复制]

Posted

技术标签:

【中文标题】当某些行已经存在时如何防止SQL插入? [复制]【英文标题】:How to prevent SQL insert when certain row already exists? [duplicate] 【发布时间】:2018-02-15 23:58:21 【问题描述】:

我有一个包含不同电影、演员、导演的数据库。

为了将导演与电影联系起来,我使用了一个表格,其中包含以下内容:

film_iddirector_id - 所以当我为电影添加导演时,必要的 id 会插入到这个表中。

所以我已经有一堆 id 并且它工作得很好。例如:

movie_id - director_id
10         15
11         17 
9          13

现在,当我将另一个具有 id 9 的导演添加到具有 id 13 的电影中时,我有两行完全相同,这就是我不想发生。如下图:

movie_id - director_id
10         15
11         17 
9          13
9          13 

相反,当已经有一行具有相同的 film_id 等于相同的 director_id 时,它不应该插入。

如何防止这种情况发生?

【问题讨论】:

如果返回任何行数据重复,则使用带有where子句的选择查询,否则插入数据 只需将这两列设为唯一。数据将被自动阻止插入数据库。 【参考方案1】:

只需从 movie_iddirector_id 列创建唯一键。

SQL 示例:

ALTER TABLE `table_name` ADD UNIQUE `index_name` (`movie_id`, `director_id`);

然后为INSERT查询添加IGNORE,它将防止Duplicate entry...错误消息。

SQL 示例:

INSERT IGNORE INTO `table_name` (...) VALUES (...)

如果你想在条目已经存在的情况下更新一些数据,那么你可以使用ON DUPLICATE KEY UPDATE。

SQL 示例:

INSERT INTO `table_name` (...) VALUES (...) ON DUPLICATE KEY UPDATE `column` = [new_value]

【讨论】:

以上是关于当某些行已经存在时如何防止SQL插入? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

sql 示例:如果行存在,则如何更新行或如​​果行不存在则插入行

如何在具有某些首字母的新表中插入所有行(pl/sql)

更新或插入 SQL Server 时忽略错误行

仅当行不存在时,如何在 SQL Server 中执行插入操作? [复制]

仅当记录不存在时才将 SQL 插入表中[重复]

PL/SQL - 仅当记录不存在时才插入记录