2016-08-20 6 views
2

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

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

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

Спасибо.

+2

Зачем беспокоиться? MySQL не устанавливает контрольные ограничения. –

+0

Если вам нужны чеки, используйте триггеры в MySQL –

+0

Прежде чем обновление будет сделано в таблицу, оно должно проверить доступный размер класса, прежде чем позволить учащемуся зарегистрировать тему. Если класс доступен только для 40 учеников, 41-й студент больше не может вставлять в таблицу. – helloworld1234

ответ

2

Поскольку MySQL не поддерживает check, для этого вам нужен триггер. Что-то вроде этого СОЗДАТЬ триггера:

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 
$$ 

Вы должны определить тот же триггер для UPDATE с.

+0

Спасибо, могу я спросить слово 'NEW' - имя таблицы? – helloworld1234

+0

'NEW' ссылается на запись, которая должна быть вставлена ​​в таблицу. 'NEW.register' - значение' register', которое вы хотите вставить. BTW, если вы определяете триггер 'UPDATE', тогда также используйте слово' NEW' для ссылки на запись, которую вы хотите обновить. –

+0

Спасибо большое, человек ... – helloworld1234

0

Немного длинный комментарий.

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

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

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

Смежные вопросы