Как и общий совет, похоже, что он должен быть частью бизнес-уровня (например, частью процедуры, которая вставляет новые резервирования), а не триггером. Это связано с тем, что триггеры могут оказывать весьма ощутимое влияние на производительность, и процедуре нужно будет искать пользовательские сообщения об ошибках и показывать их конечному пользователю.
Что касается логики, аренда автомобиля может длиться в течение нескольких дней, поэтому у вас есть два сценария: у клиента уже есть аренда, которая не возвращается до вставки начала аренды, или она планирует начать новая аренда до того, как будет введена арендная плата, должна быть возвращена. Допустимый случай, который может конфликтовать с ними, - это если пользователь в один и тот же день бросает машину в одном месте и забирает автомобиль в другом месте, поэтому мы должны принять это во внимание.
Не зная структуры вашей таблицы, довольно сложно дать точный код T-SQL, как с ними справляться. В демонстрационных целях я предполагаю, что у вас есть таблица с UserID, CarID, pickupdate и dropoffdate, и что новые строки вставляются со всеми четырьмя из этих значений.
DELIMITER //
CREATE TRIGGER Carperperson
BEFORE INSERT ON bookings
FOR EACH ROW
BEGIN
IF NEW.User_ID = bookings.User_ID
and ((new.Pickupdate >= bookings.pickupdate and new.Pickupdate < bookings.dropoffdate)
or (new.dropoffdate > bookings.pickupdate and new.dropoffdate < bookings.dropoffdate))
THEN
SIGNAL SQLSTATE '45000' set message_text='You can only book one car per single customer a day!';
DELIMITER;
Я надеюсь, что это показывает, как в целом это должно работать, даже если это не совсем соответствует вашей структуре данных. Еще раз предупреждаю, что это действительно плохая идея как триггер.