在REPLACE语句中使用where子句

时间:2013-07-28 16:39:10

标签: php sql where

我在我的PHP脚本the SQL documentation doesnt states that either I can use where clause or not.中使用了where子句(我认为在看到语法后我不能)

我的问题是我有一个存储用户注册的用户表, 现在我计划存储另一个关于用户的信息,这些信息是他们订阅的包的类型。所以我在subscribed中添加了另一列users table,但我意识到可能会添加另一列可能打扰我在PHP中编写的先前,插入,选择查询。 所以我创建了另一个表,在这里将userid作为外键.package_id作为PK,pack_detail作为包的详细信息。 现在我想存储特定用户的包详细信息,我希望如果用户以前存在,他的行应该更新,我该如何通过替换来实现?

1 个答案:

答案 0 :(得分:0)

REPLACE通过匹配主键来工作。如果在REPLACE中指定主键值并且不存在具有该值的行,则它的工作方式类似于INSERT。如果您尝试插入的主键值已存在于表中,则它将覆盖该行的其他列。

因此不需要WHERE子句。它隐含地寻找WHERE pk = value

如果您希望它检测给定用户的包详细信息并且您想要使用REPLACE,则必须将userid作为主键。

CREATE TABLE userpackages (
  userid INT PRIMARY KEY,
  package_detail TEXT,
  FOREIGN KEY (userid) REFERENCES users(userid)
);

首先我们添加用户的第一个包:

REPLACE INTO userpackages (userid, package_detail) 
VALUES (1234, 'some package');

接下来,我们更改用户1234的包:

REPLACE INTO userpackages (userid, package_detail) 
VALUES (1234, 'some other package');

如果userid不是您的主键,那么REPLACE将不起作用。