Php 在REPLACE语句中使用where子句
我在PHP脚本中使用了where子句(在看到语法后,我想我不能这样做) 我的问题是我有一个存储用户注册的用户表, 现在,我计划存储另一个关于用户的信息,这是他们订阅的包的类型。因此,我在Php 在REPLACE语句中使用where子句,php,sql,where,Php,Sql,Where,我在PHP脚本中使用了where子句(在看到语法后,我想我不能这样做) 我的问题是我有一个存储用户注册的用户表, 现在,我计划存储另一个关于用户的信息,这是他们订阅的包的类型。因此,我在用户表中添加了另一列subscribed,但我意识到添加另一列可能会干扰我在PHP中编写的上一个insert、select查询。 所以我创建了另一个表,将userid设为外键。package_id为PK,pack_detail为关于package的detail。 现在,我想存储特定用户的包详细信息,我想知道,如果
用户表
中添加了另一列subscribed
,但我意识到添加另一列可能会干扰我在PHP中编写的上一个insert、select查询。
所以我创建了另一个表,将userid设为外键。package_id为PK,pack_detail为关于package的detail。
现在,我想存储特定用户的包详细信息,我想知道,如果用户以前存在,那么他的行应该更新,如何通过替换来实现这一点?替换通过匹配主键来实现。如果在REPLACE中指定主键值,但不存在具有该值的行,则其工作方式类似于INSERT。如果您尝试插入的主键值已存在于表中,则会覆盖行的其他列 因此不需要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将不起作用。为什么不先为现有行选择,然后再进行更新?我知道,但我想通过REPLACE来完成。REPLACE使用
主键或唯一索引来确定何时插入或删除/插入。您可以使用表中的主键,也可以在(用户)或(用户,包)上创建唯一的索引/键