Как использовать CURDATE () в предложении проверки? - PullRequest
0 голосов
/ 17 марта 2019

Я пытаюсь создать таблицу, в которой поля dateFrom и dateTo должны быть выше, чем сегодняшняя дата. Поэтому я использовал CHECK, как это

CREATE TABLE Booking (
       hotelNo int(10),
       guestNo int(10),
       dateFrom datetime,
       dateTo datetime,
       roomNo int(10),
       CHECK (dateFrom >= CURDATE() AND dateTo >= CURDATE())
);

Но я продолжаю получать эту ошибку

  ERROR 1901 (HY000): Function or expression 'curdate()' cannot be used in the CHECK clause of `CONSTRAINT_1`

Я искал это в Google много раз, но все еще не мог найти способ сделать это.

1 Ответ

1 голос
/ 17 марта 2019

В документации MySQL разрешены

Литералы, детерминированные встроенные функции и операторы.Функция является детерминированной, если при наличии одинаковых данных в таблицах несколько вызовов приводят к одному и тому же результату независимо от подключенного пользователя.Примеры функций, которые не являются детерминированными и не соответствуют этому определению: CONNECTION_ID (), CURRENT_USER (), NOW ().

https://dev.mysql.com/doc/refman/8.0/en/create-table-check-constraints.html

Поэтому вместо этого я использовал триггеры, подобные этому

CREATE TRIGGER date_check
BEFORE INSERT ON Booking
FOR EACH ROW
BEGIN
IF NEW.dateFrom <= CURDATE() OR NEW.dateTo <= CURDATE() THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Invalid date!';
END IF;
END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...