Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更新记录(如果存在),否则在MySQL中插入_Mysql_Insert_Record - Fatal编程技术网

更新记录(如果存在),否则在MySQL中插入

更新记录(如果存在),否则在MySQL中插入,mysql,insert,record,Mysql,Insert,Record,我知道,这个问题被问了很多次,也得到了回答。 但是,我的问题更具体,我找不到合适的解决方案 我的表格(命名为pages)是这样的 id (int) title (text) content (text) slug (text) 如果slug(我已将其转换为唯一的)与post相同,我需要更新我的记录 我的意思是我需要根据slug记录更新/插入我的记录 例如,当前数据: id | title | content | slug | -------------------------

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

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

id (int)
title (text)
content (text)
slug (text)
如果slug(我已将其转换为唯一的)与post相同,我需要更新我的记录

我的意思是我需要根据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记录已转换为唯一键。

我能想象的最合适的事情是在Slug列上创建唯一索引

ALTER TABLE pages ADD UNIQUE KEY slug;
原因很简单:如果这不是唯一约束,那么可能会有多个带有“mainpage”的slug。。。哪一个应该更新

然后使用子句:


您说过该列不受唯一。。。为什么不呢?我是说,你愿意吗?MySQL中有一个方便的机制,如果它可以根据什么来唯一地更新以前的记录?如果slug不是唯一的,那么当你更新时,如果slug有多个实例,你打算怎么做?如果你有唯一的或主要的索引,做起来非常简单我是MySQL中的新手,我想(在一些地方阅读)该文本字段不能是唯一的/自动增加的,可能(可能)我错了。在将slug记录转换为唯一键后,它会按照我的预期工作。感谢您和所有其他人的帮助。
altertablepages添加唯一的密钥slug导致MySQL出现错误。我已经在该列上创建了一个索引——不确定这是否有什么不同。以下内容对我有用:
altertablepagesaddunique(slug)
INSERT INTO pages 
VALUES (NULL, $title, $content, $slug) ON DUPLICATE KEY UPDATE content=$content