更新记录(如果存在),否则在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