SQL - обновляется несколько полей вместо одного - PullRequest
0 голосов
/ 13 марта 2020

У меня есть четыре столбца: ID, STARTTIME, ENDINGTIME и DURATION.

Таблица создается с:

CREATE TABLE tableName (
    ID INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT, 
    STARTTIME TIMESTAMP,
    ENDINGTIME TIMESTAMP,
    DURATION TIME);

Идентификатором является столбец auto_increment. Тогда у меня есть код для вставки нового STARTTIME:

INSERT INTO tableName(STARTTIME) VALUES(CURRENT_TIMESTAMP);

Во-вторых, у меня есть код для обновления строки с наибольшим идентификатором для установки ENDINGTIME:

SET @latestInsertID = (SELECT MAX(ID) FROM tableName);
UPDATE tableName SET ENDINGTIME=(CURRENT_TIMESTAMP) WHERE ID=@latestInsertID;

Сейчас Я могу выполнить оба (все три) запроса без исключения, и первый запрос работает совершенно нормально (как я и ожидал). Но последний запрос обновляет (из строки, которую я хотел обновить) ENDINGTIME, а также STARTTIME. Почему он просто не обновляет ENDINGTIME?

Спасибо за каждое решение!

Ответы [ 2 ]

0 голосов
/ 14 марта 2020

Используйте DATETIME вместо TIMESTAMP ( MWE )

Вот почему:

Поле метки времени обычно используется для определения того, в какой момент времени строка была добавлена ​​или обновлена, и по умолчанию автоматически назначается текущая дата и время, когда запись вставляется или обновляется. Свойства automati c применяются только к первому TIMESTAMP в записи; последующие столбцы TIMESTAMP не будут изменены.

0 голосов
/ 13 марта 2020

Образованное предположение. Столбец определен как:

CREATE TABLE tablename(
    -- ...
    STARTTIME TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

Или существует основной триггер, который выполняет тот же лог c.

...