использовать REPLACE INTO для новых и отредактированных элементов? - PullRequest
2 голосов
/ 01 августа 2011

Мне кажется, что этот рефакторинг работает в моей голове, но я бы хотел, чтобы кто-то проверил мою логику:

Текущий процесс:

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 и каждый из этих запросов имеет множество параметров, это сэкономит хрень пространства.

Но я хотел сначала опубликовать это здесь, чтобы убедиться, что я ничего не пропускаю.

Будет ли этот рефакторинг давать тот же результат?

1 Ответ

1 голос
/ 01 августа 2011

Если вас не волнует изменение первичного ключа, используйте REPLACE.Если ключ должен оставаться согласованным, например, если он был сопоставлен с другими таблицами, продолжайте использовать INSERT и UPDATE.REPLACE удаляет и повторно вставляет, поэтому, если ваш первичный ключ является полем auto_increment, он изменится на новое значение приращения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...