Php 如果在SQL中找到输入名称,则执行其他操作执行…;使用SQL查询

Php 如果在SQL中找到输入名称,则执行其他操作执行…;使用SQL查询,php,sql,mysql,if-statement,Php,Sql,Mysql,If Statement,我正在尝试编写一个SQL查询,该查询将在“rName”列的“persons”表中检查是否有一个名称“jack”,如果该名称存在,则更新该行,否则使用新的rName插入一个新行 我一直在尝试IF/ELSE语句,但还没有真正了解它们是如何工作的。 或者有没有更好的方法来做我想做的事情而不使用If/ELSE?(我没有做太多的SQL工作,我过去只做更新、插入、删除、更改……诸如此类的事情 到目前为止,我有以下内容:(如果在rName行中找到jack,则更新它,否则插入新行) 编辑:我想我没有完全解释我想

我正在尝试编写一个SQL查询,该查询将在“rName”列的“persons”表中检查是否有一个名称“jack”,如果该名称存在,则更新该行,否则使用新的rName插入一个新行

我一直在尝试IF/ELSE语句,但还没有真正了解它们是如何工作的。 或者有没有更好的方法来做我想做的事情而不使用If/ELSE?(我没有做太多的SQL工作,我过去只做更新、插入、删除、更改……诸如此类的事情

到目前为止,我有以下内容:(如果在rName行中找到jack,则更新它,否则插入新行)

编辑:我想我没有完全解释我想要什么,
rName应该都是唯一的名称,没有2个应该是相同的。我尝试过重复密钥更新,但它似乎只是用新数据插入了一个新行。但我希望它用新数据,rName(jack)更新已经存在的rName(jack)行应保持不变,但该行中的其他字段应根据提供的新数据进行更新。

我知道您正在使用mysql。您需要mysql的
insert…on duplicate key update
语法。

我知道您正在使用mysql。您需要mysql的
insert…on duplicate key update
语法。

在您的情况下:

INSERT INTO persons(`rName`, `foo`) VALUES('jack', 'bar') ON DUPLICATE KEY UPDATE `foo` = VALUES(`bar`);
rName
必须有一个唯一的键才能工作。如果表中有一个“jack”,它会用“bar”更新字段
foo
,如果没有“jack”,它会插入一个新行,其中
rName
=“jack”和
foo
=“bar”。

在您的情况下:

INSERT INTO persons(`rName`, `foo`) VALUES('jack', 'bar') ON DUPLICATE KEY UPDATE `foo` = VALUES(`bar`);

rName
必须有一个唯一的键才能工作。如果表中有一个“jack”,那么它会用“bar”更新字段
foo
,如果没有“jack”,它会插入一个新行,其中包含
rName
=“jack”和
foo
=“bar”。

重复键更新时出现的问题是您的名字是columnn没有唯一约束,因此根据表定义,您允许重复项。

在重复键更新时,您遇到的问题是您的名称列没有唯一约束,因此根据表定义,您允许重复项。

另请参阅:

你能行

REPLACE INTO persons(`rName`, `foo`) VALUES('jack', 'bar')
虽然从技术上讲,如果冲突行已经存在,它将被删除和替换,而不是更新。但这可能正是您想要的。

另请参见:

你能行

REPLACE INTO persons(`rName`, `foo`) VALUES('jack', 'bar')

虽然从技术上讲,如果冲突行已经存在,它将被删除和替换,而不是更新。但这可能正是您想要的。

rName应该都是唯一的名称,没有2个应该是相同的。我尝试过这一点,但它似乎只是用新数据插入新行。但我希望它上载已经存在的rName(jack)带有新数据的行,rName(杰克)应保持不变,但该行中的其他字段应更新。您确定已在rName列上设置了唯一索引吗?因为查询正按照您所述进行。噢,愚蠢的我,忘记了唯一索引,现在添加了它,所有都正常工作。谢谢!rName应都是唯一名称,第2个应相同。我已尝试这个,但它似乎只是插入了一个包含新数据的新行。但我希望它上载包含新数据的已有rName(jack)行,rName(jack)应保持不变,但该行中的其他字段应更新。您确定已在rName列上设置了唯一索引吗?因为查询正按照您所描述的进行。噢,愚蠢的我,忘记了唯一索引,现在添加了它,一切正常。谢谢!