Поскольку вам нужно сохранить старые идентификаторы, я предполагаю, что вы собираетесь создать новый столбец для идентификатора автоинкремента, который станет вашим основным ключом, но сохранить существующий столбец идентификатора и переименовать его (в old_id,может быть?).Я также собираюсь предположить, что вы записали, когда клиент подписался.
Если вы сделаете свой старый столбец идентификатора обнуляемым (допустите NULL в качестве допустимого значения), тогда вы можете просто проверить, является ли старый столбец идентификатора NULL.Если это не NULL, то рассматривайте это как идентификатор, в противном случае используйте столбец автоинкремента.
Поиск клиента:
SELECT *
FROM customer
WHERE (id = /*Put your ID here*/ AND reg_date >= /*Put the date the new regime starts here*/)
OR (id_old = /*put your ID here*/ AND reg_date < /*Put the date the new regime starts here*/)
Это иногда возвращает 2 строки, поэтому вам придется использовать некоторые другие критерии для уникальной идентификации данного клиента.
Что касается связи старого клиента с другими таблицами в базе данных, вы всегда можете использовать новый идентификатор внутри всей БД после ее создания.Очевидно, вам придется обновить таблицы, которые используют старый идентификатор в качестве внешнего ключа.
UPDATE target_table
JOIN customers on target_table.cust_id = customers.id_old
SET target_table.cust_id = customers.id;
(Примечание. Выше приведен простой и грязный запрос, который еще не был протестирован! Я бы предложил протестировать копию базы данных, прежде чем вы попробуете ее по-настоящему!)