我的MySQL数据库中有一张表,其中包含他们在注册时提交的每个用户的信息。
我现在想让用户更改其中一列(第X列),但只能更改一次。
最好的方法是什么?
我能想到的唯一方法是使用默认为0的二进制值向表中添加一个附加列(列Z),并在用户更新列X时更改为1。如果列Z为0,则站点允许更改,否则,它不允许更改。
有更好的方法吗?列Z应该与列X在同一个表中吗?我应该考虑的任何其他相关要点/问题?
感谢。
答案 0 :(得分:3)
一旦将行插入表中,就可以创建列x的默认值。然后,当用户想要更新他的行时,db会检查此值,如果它自插入后没有更改,则可以允许用户更新。否则它会拒绝
CREATE TABLE example_table (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
data VARCHAR(100),
value_to_be_updated_once DEFAULT NULL
);
在代码中,您可以检查列(value_to_be_updated_once)是否为空,然后应该允许用户编辑。
您必须确保用户未将此值设置为NULL,除非您希望拥有此值。 (也许用户改变了主意,稍后会进行编辑)
答案 1 :(得分:2)
您可能会在某个时候决定允许用户更改columnX 3次。布尔值不允许这样做。如果您决定允许用户更改columnY该怎么办?那么呢?
如果你绝对肯定你将永远不需要改变你的规则,二进制标志将正常工作。但是,如果您可能允许并限制具有可能不同限制的多个列的更改,则可以考虑使用User_Edits
表。它可能看起来像这样:
tablename varchar(30) not null,
columnname varchar(30) not null,
user_id int unsigned not null,
changetime timestamp default current_timestamp,
oldvalue text
要了解用户完成了多少次修改:
SELECT COUNT(user_id) FROM User_Edits
WHERE tablename='Mytable' AND columnname='ColumnX';
而且,作为额外的奖励,您将拥有允许您撤消更改的审计跟踪。