SQL更新否则插入不起作用[重复]

Posted

技术标签:

【中文标题】SQL更新否则插入不起作用[重复]【英文标题】:SQL Update else Insert not working [duplicate] 【发布时间】:2016-09-21 10:09:58 【问题描述】:

我正在尝试更新 SQL 数据库中的用户详细信息,但是如果该用户的一行不存在,我需要为该用户创建一个(每个用户只有一个) 它只是不更新​​也不插入。 这是以下脚本。

$sql = "IF EXISTS (SELECT * FROM user_details WHERE user_id = $user_id)
UPDATE user_details SET work = $work, education = $education, location = $location, relationship = $relationship, phone = $phone, email = $email, website = $website, language = $language, skill = $skill, tumbkr = $tumblr, instagram = $instagram, skype = $skype, facebook = $facebook, youtube = $youtube, twitter = $twitter, about = $about, user_id = $user_id WHERE user_id = $user_id
ELSE
INSERT INTO user_details (work, education, location, relationship, phone, email, website, language, skill, tumblr, instagram, skype, facebook, youtube, twitter, about, user_id)";
    $q = $conn->prepare($sql);
    $q->execute();  

【问题讨论】:

你应该了解prepared statements 查找insert...on duplicate key update语法。 准备好的语句不会花费很长时间来编写。你已经得到了 90%。 只要它是主键(即唯一),那么在重复键上插入就可以了。如果不是,你应该问为什么这不起作用。您当前的 SQL ......不是很好,而且损坏了。 @JonStirling 是的,我认为 ... 不太好,并且损坏 是正确的术语 :-) 【参考方案1】:

如下操作:

INSERT INTO table_name (field1,field2) VALUES (val1,val2) ON DUPLICATE KEY UPDATE field_name=VALUE;

【讨论】:

没有任何解释该语句的作用以及该语句需要满足什么要求,这个答案几乎是无用的。 代码很简单,我认为不需要解释。 它确实需要解释,因为除非满足特定要求,否则上述代码将不起作用。无论如何,这个问题已经在 SO 上回答过很多次了。 所以,在这种情况下,用适当的解释编辑我的答案...... :) 毫无意义,重复的主题列出了所有可能的解决方案以及 mysql 文档的链接。

以上是关于SQL更新否则插入不起作用[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Java Last Insert ID 不起作用[重复]

sql级联更新和级联删除不起作用

除非它等于0,否则声明一个变量不起作用[重复]

dao 的插入和更新方法不起作用

如果不存在,mysql插入不起作用创建重复键

sql插入过程不起作用