LINUX.ORG.RU

duplicate entry для составного ключа с датой

 ,


0

1

Всем привет.

Имеем таблицу, такую вот

mysql> describe driveplan_items;
+--------------+------------------+------+-----+---------+----------------+
| Field        | Type             | Null | Key | Default | Extra          |
+--------------+------------------+------+-----+---------+----------------+
| id           | int(11) unsigned | NO   | PRI | NULL    | auto_increment | 
| owner        | int(11)          | NO   | MUL | NULL    |                | 
| driveplan_id | int(11)          | NO   | MUL | NULL    |                | 
| geofence_id  | int(11)          | YES  |     | NULL    |                | 
| sort         | int(11)          | NO   |     | 0       |                | 
| arrival      | timestamp        | YES  |     | NULL    |                | 
| departure    | timestamp        | YES  |     | NULL    |                | 
| data         | longtext         | YES  |     | NULL    |                | 
| status       | tinyint(1)       | NO   |     | NULL    |                | 
| created_at   | timestamp        | YES  |     | NULL    |                | 
| updated_at   | timestamp        | YES  |     | NULL    |                | 
+--------------+------------------+------+-----+---------+----------------+

Пытаемся вставить запись

mysql> INSERT INTO `driveplan_items` (`arrival`, `created_at`, `data`, `departure`, `driveplan_id`, `geofence_id`, `owner`, `sort`, `updated_at`) VALUES ('2015-03-29 02:25:00', '2015-03-30 00:06:25', '{\\\"stopid\\\":12}', '2015-03-29 02:30:00', 142739, 1519, 229, 8, '2015-03-30 00:06:25');
Ошибка
ERROR 1062 (23000): Duplicate entry '229-142739-2015-03-29 03:00:00' for key 'owner_2'

При этом записи с такой датой 2015-03-29 02:25:00 (как в инсерте) в базе нет, а вот 03:00:00 есть. Но мы же вставляем другое время. Триггеров для этой таблицы нет. Этот функционал работал нескольо лет и тут стал стабильно выдавать эту ошибку

mysql> select * from driveplan_items where owner=229 and driveplan_id=142739 and arrival="2015-03-29 03:00:00";
+--------+-------+--------------+-------------+------+---------------------+---------------------+---------------+--------+---------------------+---------------------+
| id     | owner | driveplan_id | geofence_id | sort | arrival             | departure           | data          | status | created_at          | updated_at          |
+--------+-------+--------------+-------------+------+---------------------+---------------------+---------------+--------+---------------------+---------------------+
| 834786 |   229 |       142739 |        1519 |    8 | 2015-03-29 03:00:00 | 2015-03-29 03:00:00 | {"stopid":12} |      0 | 2015-03-27 01:34:35 | 2015-03-27 01:34:35 | 
+--------+-------+--------------+-------------+------+---------------------+---------------------+---------------+--------+---------------------+---------------------+
1 row in set (0.00 sec)

mysql> select * from driveplan_items where owner=229 and driveplan_id=142739 and arrival="2015-03-29 02:25:00";
Empty set, 1 warning (0.01 sec)

Помогите понять что случилось.

★★★★★

Ответ на: комментарий от turtle_bazon
Так arrival не в составе же ключа.

Там есть второй составной ключ, owner_2 который состоит из owner, driveplan_id и arrival. Прошу прощения - забыл показать описание ключей=(

Но проблему уже нашел - перевод времени на летнее(не у нас).

Он (сам mysql) все время между 02:00:00-03:00:00 округлял до 03:00:00 при вставке. Поэтому сначала писалось 02:10:00 -> 03:00:00, потом 02:30:00 ->03:00:00 ->duplicate entry. Такие вот дела...

Dudraug ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.