使用REPLACE INTO进行新项目和编辑项目?

时间:2011-08-01 01:48:30

标签: php mysql refactoring pdo

这个重构似乎在我的头脑中可行,但我希望有人检查我的逻辑:

当前流程:

if (item == new) {
    INSERT INTO basic_table
    $itemUID = get last insert ID // item's UID
    INSERT INTO another_table // more stuff
    INSERT INTO another_table2 // more stuff
    INSERT INTO another_table3 // more stuff
} else {
    $itemUID = $_POST['uid']
    UPDATE basic_table
    REPLACE INTO another_table // more stuff
    REPLACE INTO another_table2 // more stuff
    REPLACE INTO another_table3 // more stuff
}

(注意 - REPLACE INTO 用于现有项目,因为它们可能会或可能不会在所有表格中都有条目,具体取决于其初始配置)

我想到,由于除INSERT INTO // REPLACE INTO之外的所有后续查询都相同,我应该能够重构为:

if (item == new) {
    INSERT INTO basic_table
    $itemUID = get last insert ID // item's UID
} else {
    $itemUID = $_POST['uid']
    UPDATE basic_table
}
    REPLACE INTO another_table // more stuff
    REPLACE INTO another_table2 // more stuff
    REPLACE INTO another_table3 // more stuff

考虑到我正在使用PDO并且每个查询都有很多参数,这将节省空间的 crapload

但我想先在这里张贴,以确保我不会忽略某些东西。

这种重构会产生相同的结果吗?

1 个答案:

答案 0 :(得分:1)

如果您不关心更改主键,请使用REPLACE。如果密钥需要保持一致,如果已映射到​​其他表,则继续使用INSERTUPDATEREPLACE删除并重新插入,因此如果您的主键是auto_increment字段,它将更改为新的增量值。