mysql - 如果存在则更新记录,否则插入 MySQL

标签 mysql insert record

我知道,这个问题被问过很多次,也回答过..
但是,我的问题更具体,我找不到合适的解决方案。

我的表格(命名为pages)就是这样;

id (int)
title (text)
content (text)
slug (text)

如果 slug(我已将其转换为唯一)与发布的相同,我需要更新我的记录。

我的意思是我需要根据 slug 记录更新/插入我的记录。

例如。当前数据:

  id  |  title  |  content  |  slug  |
--------------------------------------
  1  |  MainPage| some html | mainpage

如果发布的数据有 title=ChildPage, content=html.., slug=mainpage 那么我需要更新以前的记录(标题和内容记录),但是如果数据有 title= MainPage, content=html.., slug=other_slug 然后我需要用新的 id 插入这个数据。

更新

Slug 记录已转换为 UNIQUE 键。

最佳答案

我能想到的最合适的事情是在 slug 列上创建一个唯一索引

ALTER TABLE pages ADD UNIQUE KEY slug;

原因很简单:如果这不是唯一约束,可能会有不止一个 slug 带有“mainpage”……应该更新哪一个??

然后使用 ON DUPLICATE KEY UPDATE子句:

INSERT INTO pages 
VALUES (NULL, $title, $content, $slug) ON DUPLICATE KEY UPDATE content=$content

关于mysql - 如果存在则更新记录,否则插入 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11404243/

相关文章:

php - 在一对多关系中获取字符串值而不是外部 id

php - 使用外键插入 PDO 失败

PHP/MySQL : how to display the words before and after the searched item

PHP 二维数组到 MySQL 数据库

c - 数据库系统中的文件组织和操作

php - 同一个表上的重复记录并重命名字段值

php - PDO INSERT INTO 不起作用

c++ - 将数据插入数据结构时是深拷贝还是浅拷贝?

SQL - 插入一行并返回主键

random - AWS DynamoDB - 随机选择记录/项目?