【发布时间】:2011-05-12 11:18:32
【问题描述】:
我有一个包含多个组合框和文本框的长表单。
我正在使用此表单进行注册,我也使用相同类型的表单进行更新。
- 我使用
INSERT查询完成了注册过程。 - 对于更新,我有一个想法。 不使用
UPDATE查询,我应该先删除(DELETE)记录,然后再将其插入数据库,因为我已经完成了插入过程以进行注册,我可以重复使用代码。
这种方法有什么问题吗?
【问题讨论】:
我有一个包含多个组合框和文本框的长表单。
我正在使用此表单进行注册,我也使用相同类型的表单进行更新。
INSERT查询完成了注册过程。UPDATE查询,我应该先删除(DELETE)记录,然后再将其插入数据库,因为我已经完成了插入过程以进行注册,我可以重复使用代码。这种方法有什么问题吗?
【问题讨论】:
在某些情况下(尤其是在批量数据移动作业等中),做这样的事情可能是有意义的。
但在你的情况下,我真的看不出你有什么理由应该按照你的建议去做。
除了为您节省微不足道的开发时间外,我从您的方法中看不到任何好处。不利的是,每次更新用户数据时,您的应用程序将执行 2 个 SQL 语句(DELETE + INSERT)而不是 1 个 UPDATE。根据您的应用程序的工作方式,您还需要一些其他逻辑来跟踪用户配置文件的更改,因为 dtCreated 等内容还不够。
我会用一个简单的 UPDATE 语句代替。
【讨论】:
您可以使用使用相同语法的REPLACE INTO 命令。在屏幕后面,它将执行DELETE,然后是INSERT。如果您使用InnoDB 表并且您已经设置了关系,如果您认为REPLACE INTO 将像UPDATE 一样工作,这可能会非常危险。结果,由于级联规则,一堆删除的行。
您考虑使用DELETE 后跟INSERT 进行更新,因为您已准备好插入sql。好吧,您可以使用 UPDATE 之类的语法进行插入。这样,只需根据您的任务使用 INSERT/UPDATE。
所以而不是:
INSERT INTO products (name) VALUES ('iPhone');
.. 你会使用:
INSERT INTO products SET name='iPhone';
看起来和更新差不多:
UPDATE products SET name='iPhone' WHERE id=1;
几乎一样。
【讨论】: