Я изменяю свою программу, чтобы позволить пользователям определять обычный код для своих записей в одной из моих таблиц в базе данных. Итак, я добавляю новый столбец в свою базу данных, чтобы сохранить «локальный код» каждого элемента, определенного пользователем, в отличие от «универсального кода» элемента, который фактически является идентификатором записи в моей таблице. .
Итак, я хочу написать запрос SQL, который при вставке новой записи, если 'local_code' равен нулю (я могу определить это по PHP, но я открыт для SQL решения для этого также), он вставляет идентификатор элемента в 'local_code'. Примерно так:
INSERT INTO items (`field_1`, `local_code`, `field_2`, ...)
VALUES ('blah blah blah', PREVIOUS_RECORD_ID + 1, 'blah blah blah', ...);
Итак, в основном мой вопрос состоит в том, как найти PREVIOUS_RECORD_ID без проблем с параллелизмом. Я не могу использовать LAST_INSERT_ID () здесь, и использование SELECT max (id) ИЗ элементов может вызвать проблемы параллелизма, если два пользователя добавляют новые записи одновременно.
Если кто-то может придумать решение с использованием MySQL триггеров ( как триггер, который обновляет local_code
, если после вставки новой записи он становится нулевым), это тоже подойдет.
Заранее спасибо.
Пример:
Допустим, в моей базе данных есть три столбца: id, код, имя
id | code | name
1 AAA blah blah blah1
2 BBB blah blah blah2
Теперь я хочу вставить новую запись. Если пользователь не ввел код, я хочу, чтобы мой запрос SQL сделал это
INSERT INTO items (`code`, `name`)
VALUES (3, 'blah blah blah3', ...);
Но если пользователь ввел "CCC" для кода, он должен работать следующим образом:
INSERT INTO items (`code`, `name`)
VALUES ("CCC", 'blah blah blah3', ...);
Я могу определить, является ли код нулевым или нет, используя PHP, чтобы определить, какой запрос SQL должен быть выполнен. Итак, моя настоящая проблема с первым случаем, когда код NULL. Кроме того, если у кого-то есть решение SQL, которое обрабатывает оба случая, это будет удивительно.