Поле обновления MySQL при вставке, если другое поле (не ключевое) изменилось

0

Я относительно запутался в этом...

У меня есть таблица вроде:


+----------------+--------------------------------------------------+------+-----+-------------------+-----------------------------+
| Field          | Type                                             | Null | Key | Default           | Extra                       |
+----------------+--------------------------------------------------+------+-----+-------------------+-----------------------------+
| dhcp           | int(10) unsigned                                 | NO   | PRI | 0                 |                             |
| ip             | int(10) unsigned                                 | NO   | PRI | 0                 |                             |
| mac            | varchar(17)                                      | YES  | MUL | NULL              |                             |
| lease          | enum('fr','a','fi','a','u') | NO   | MUL | free) |                                |                             |
| date           | timestamp                                        | NO   | MUL | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
| uid            | varchar(255)                                     | YES  |     | NULL              |                             |
| starts_date    | datetime                                         | YES  |     | NULL              |                             |
| starts_weekday | tinyint(1)                                       | YES  |     | NULL              |                             |
| ends_date      | datetime                                         | YES  |     | NULL              |                             |
| ends_weekday   | tinyint(1)                                       | YES  |     | NULL              |                             |
| first_seen     | datetime                                         | YES  |     | NULL              |                             |
+----------------+--------------------------------------------------+------+-----+-------------------+-----------------------------+

Я только что добавил столбец first_seen. Идея заключается в том, что я буду использовать INSERT... ON DUPLICATE KEY UPDATE. dhcp и ip являются правыми первичными ключами, так как я хочу иметь только одну запись для них за раз. Поэтому, если mac изменяется, он должен обновить существующую строку, если она существует для этой комбинации dhcp, ip.

однако, я хочу, чтобы first_seen обновлялся каждый раз, когда видна комбинация (ip, dhcp, mac)... т.е. если изменяется значение "mac", я хочу обновить first_seen. Если значение "mac" остается неизменным, я хочу оставить first_seen тем же.

Есть ли простой способ сделать это в SQL... то есть IF() или что-то еще? или мне нужно обрабатывать это с помощью другого SELECT в PHP script (имея в виду, что мы разбираем файл для получения этих данных и вставляем строки abub 10-16k, поэтому время является фактором).

Спасибо, Джейсон

Теги:

4 ответа

0
Лучший ответ

Спасибо за все предложения, ребята. Оказывается, мне не нужен триггер для этого, просто IF в начале оператора обновления.

в INSERT INTO... У меня есть first_seen = CURRENT_TIMESTAMP

Тогда в начале ОБНОВЛЕНИЯ у меня есть

first_seen = IF (mac!= VAULES (MAC), CURRENT_TIMESTAMP, first_seen)

Это обновляет first_seen, если изменяется mac, иначе он устанавливает first_seen для себя (его текущее значение).

1

Считаете ли вы использование triggers? Это событие на стороне сервера MySQL происходит, когда происходит какое-то другое событие, такое как обновление столбца mac.

0

Для этого можно использовать для запуска MySQL.

0

Я думаю, вы можете использовать колонку TIMESTAMP в MySQL - это изменится, когда запись обновляется или вставляется. Он изменится, если любое значение в строке изменится. Если вам нужно что-то еще, вы можете рассмотреть trigger, который запускается после обновления и проверяет другую бизнес-логику вы ссылаетесь.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню