当某些行已经存在时如何防止SQL插入? [复制]
Posted
技术标签:
【中文标题】当某些行已经存在时如何防止SQL插入? [复制]【英文标题】:How to prevent SQL insert when certain row already exists? [duplicate] 【发布时间】:2018-02-15 23:58:21 【问题描述】:我有一个包含不同电影、演员、导演的数据库。
为了将导演与电影联系起来,我使用了一个表格,其中包含以下内容:
film_id 和 director_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_id
和 director_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 示例:如果行存在,则如何更新行或如果行不存在则插入行