MySql Workbench ПРОВЕРЬТЕ ограничение

mysql mysql-workbench check-constraints

7993 просмотра

2 ответа

Здесь я хочу создать ограничение 2 CHECK перед вставкой записи в базу данных.

ALTER TABLE SubjectEnrollment
ADD CONSTRAINT register CHECK (register <= classSize AND register >=0),
ADD CONSTRAINT available CHECK (available <= classSize AND available >= 0);
  1. Атрибут register должен быть не больше атрибута classSize и меньше 0.
  2. Доступный атрибут должен быть не больше атрибута classSize и меньше 0.

Когда я набираю этот синтаксис в MySql Workbench, он жалуется на «Синтаксическая ошибка: неожиданный« CHECK »(проверка)». Как мне добавить их, используя TRIGGER?

Спасибо.

Автор: helloworld1234 Источник Размещён: 08.11.2019 11:28

Ответы (2)


5 плюса

Решение

Поскольку MySQL не поддерживает check, для этого нужен триггер. Примерно такой триггер CREATE:

delimiter $$
CREATE TRIGGER some_trigger_name
BEFORE INSERT ON SubjectEnrollment
FOR EACH ROW
BEGIN    
    IF (NEW.register > NEW.classSize OR NEW.register < 0)        
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'invalid data';
    END IF;
END
$$

Вам нужно определить тот же триггер для UPDATEs.

Автор: juergen d Размещён: 20.08.2016 03:15

0 плюса

Немного времени для комментариев.

MySQL поддерживает синтаксис для check, но в create table:

create table (
    . . . 
    CHECK (register <= classSize AND register >= 0)
);

Checkна самом деле не реализовано ни в каких движках, поэтому это ничего не делает. Предположительно по этой причине он не является частью constraintсинтаксиса и, следовательно, не доступен для add constraint.

Автор: Gordon Linoff Размещён: 20.08.2016 03:12
Вопросы из категории :
32x32