powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Ограничение даты в БД
12 сообщений из 12, страница 1 из 1
Ограничение даты в БД
    #39668492
Kra-MaX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть задание:
Создать таблицу в которо при вставке данных (даты в поле Дата)
должна проходить проверка дата в пределах от 1.1.2000 до 31.12.2020
Никак не получается реализовать.
Может кто поможет?

CREATE TABLE table1(
id INT(11) NOT NULL AUTO_INCREMENT,
DateOf date NOT NULL,
PRIMARY KEY (id))
ENGINE = MYISAM
AUTO_INCREMENT=1
CHARACTER SET UTF8mb4
COLLATE utf8mb4_general_ci,

Create function 'Date_FN'()
Returns TEXT
AS
BEGIN
Declare @DATE_t Data,
if 'DateOf'>'2000/01/01'
then @DATE_t='DateOf'
else Return 'is invalid Data',

if @DATE_t<'2020/12/30'
then INSERT INTO table1 (DateOf)
VALUES (@DATE_t)
else Return 'is invalid Data',
End,

А как теперь сюда прикрутить тригер???
...
Рейтинг: 0 / 0
Ограничение даты в БД
    #39668499
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А нафига триггер? Функции, вроде, вполне достаточно.
...
Рейтинг: 0 / 0
Ограничение даты в БД
    #39668780
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А check constraint не справится?..
...
Рейтинг: 0 / 0
Ограничение даты в БД
    #39668862
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovА check constraint не справится?Reference ManualThe CHECK clause is parsed but ignored by all storage engines.

Kra-MaXпри вставке данных (даты в поле Дата) должна проходить проверка дата в пределах от 1.1.2000 до 31.12.2020Ну что при прохождении проверки запись помещается в таблицу, мы типа догадались...
А что делать, если проверка не прошла? поменять на некую дефолтную? на некую вычисляемую из введённого значения? сгенерировать ошибку?
А что делать, если не является валидной датой?
А если введённое значение вообще не может быть приведено к типу даты?
А если Null?
...
Рейтинг: 0 / 0
Ограничение даты в БД
    #39669256
Kra-MaX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkleА нафига триггер? Функции, вроде, вполне достаточно.
Тригер отрабатывает по условию "До вставки данных" автоматически!!!

А функция запускается руками.
...
Рейтинг: 0 / 0
Ограничение даты в БД
    #39669258
Kra-MaX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaDimitry SibiryakovА check constraint не справится?Reference ManualThe CHECK clause is parsed but ignored by all storage engines.

Kra-MaXпри вставке данных (даты в поле Дата) должна проходить проверка дата в пределах от 1.1.2000 до 31.12.2020Ну что при прохождении проверки запись помещается в таблицу, мы типа догадались...
А что делать, если проверка не прошла? поменять на некую дефолтную? на некую вычисляемую из введённого значения? сгенерировать ошибку?
А что делать, если не является валидной датой?
А если введённое значение вообще не может быть приведено к типу даты?
А если Null?

Любые другие данные не валидные описаны в функции и возвращают 'is invalid Data'"
...
Рейтинг: 0 / 0
Ограничение даты в БД
    #39669359
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
mysql> CREATE TABLE test (id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, dt DATE);
Query OK, 0 rows affected (0.41 sec)

mysql> DELIMITER @@;

mysql> CREATE TRIGGER tr_bi
    -> BEFORE INSERT ON test
    -> FOR EACH ROW
    -> BEGIN
    ->     IF new.dt < '2001-01-01' OR new.dt >= '2020-01-01' THEN
    ->         SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Wrong date entered.';
    ->     END IF;
    -> END;
    -> @@;
Query OK, 0 rows affected (0.11 sec)

mysql> DELIMITER ;

mysql> INSERT INTO test (dt) VALUES ('2010-01-01');
Query OK, 1 row affected (0.05 sec)

mysql> INSERT INTO test (dt) VALUES ('2030-01-01');
ERROR 1644 (45000): Wrong date entered.

mysql> INSERT INTO test (dt) VALUES ('2000-01-01');
ERROR 1644 (45000): Wrong date entered.

mysql> SELECT * FROM test;
+----+------------+
| id | dt         |
+----+------------+
|  1 | 2010-01-01 |
+----+------------+
1 row in set (0.00 sec)

mysql>
...
Рейтинг: 0 / 0
Ограничение даты в БД
    #39669873
Kra-MaX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
mysql> CREATE TABLE test (id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, dt DATE);
Query OK, 0 rows affected (0.41 sec)

mysql> DELIMITER @@;

mysql> CREATE TRIGGER tr_bi
    -> BEFORE INSERT ON test
    -> FOR EACH ROW
    -> BEGIN
    ->     IF new.dt < '2001-01-01' OR new.dt >= '2020-01-01' THEN
    ->         SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Wrong date entered.';
    ->     END IF;
    -> END;
    -> @@;
Query OK, 0 rows affected (0.11 sec)

mysql> DELIMITER ;

mysql> INSERT INTO test (dt) VALUES ('2010-01-01');
Query OK, 1 row affected (0.05 sec)

mysql> INSERT INTO test (dt) VALUES ('2030-01-01');
ERROR 1644 (45000): Wrong date entered.

mysql> INSERT INTO test (dt) VALUES ('2000-01-01');
ERROR 1644 (45000): Wrong date entered.

mysql> SELECT * FROM test;
+----+------------+
| id | dt         |
+----+------------+
|  1 | 2010-01-01 |
+----+------------+
1 row in set (0.00 sec)

mysql>



Спасибо огромное. Почти отлично ((
При попытке создать тригер валится ошибка ((
10:44:54 CREATE TRIGGER tr_bi BEFORE INSERT ON test FOR EACH ROW BEGIN IF new.dt < '2001-01-01' OR new.dt >= '2020-01-01' THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Wrong date entered.'; END IF; END; Error Code: 1054. Unknown column 'dt' in 'NEW' 0.000 sec
...
Рейтинг: 0 / 0
Ограничение даты в БД
    #39669963
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А поменять имена полей на свои не пробовал?
...
Рейтинг: 0 / 0
Ограничение даты в БД
    #39670060
Kra-MaX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkleА нафига триггер? Функции, вроде, вполне достаточно.

Я полностью создаю таблицу по вашему примеру - добьюсь корректной работы и тогда буду адаптировать. Я новичек - сразу нужно понять принцип - потом ломать)))
...
Рейтинг: 0 / 0
Ограничение даты в БД
    #39670061
Kra-MaX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaА поменять имена полей на свои не пробовал?
Я полностью создаю таблицу по вашему примеру - добьюсь корректной работы и тогда буду адаптировать. Я новичек - сразу нужно понять принцип - потом ломать)))
...
Рейтинг: 0 / 0
Ограничение даты в БД
    #39670137
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kra-MaXЯ полностью создаю таблицу по вашему примеруТогда покажите полностью то, что у Вас получается, так же, как у меня, процитируйте с консоли от CREATE TABLE и до сообщения об ошибке включительно. В теге SRC, есссно.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Ограничение даты в БД
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]