2014-10-29 2 views
0

Как я могу создать триггер для этого двух проверочных ограниченияMYSQL множественного событие триггера

create table section (course_id varchar(8), 
    sec_id varchar(8), 
    semester varchar(6) 
    check (semester in ('Fall', 'Winter', 'Spring', 'Summer')), 
    year numeric(4,0) 
    check (year > 1701 and year < 2100), 
    building varchar(15), 
    room_number varchar(7), 
    time_slot_id varchar(4), 
    primary key (course_id, sec_id, semester, year), 
    foreign key (course_id) references course on delete cascade, 
    foreign key (building, room_number) references classroom on delete set null); 

======================= ======================================

За исключением решения.

+0

Вместо этого вы можете использовать тип данных ENUM для столбца семестра. http://dev.mysql.com/doc/refman/5.7/en/enum.html – wolfgangwalther

ответ

0

Uzzal,

Как объяснен в статье, "Validating data using a TRIGGER", вы должны использовать BEFORE INSERT триггер для проверки данных, например, так:

-- validate semester 
CREATE TRIGGER `semester_validate_semester_insert` 
    BEFORE INSERT 
    ON `section` 
    FOR EACH ROW 
    BEGIN 
      IF NEW.`semester` NOT IN ('Fall', 'Winter', 'Spring', 'Summer') THEN 
     SIGNAL SQLSTATE VALUE '45000' 
      SET MESSAGE_TEXT = '[table:section] - `semester` column is not valid'; 
    END IF; 
END; 

и

-- validate year 
CREATE TRIGGER `semester_validate_year_insert` 
    BEFORE INSERT 
    ON `section` 
    FOR EACH ROW 
    BEGIN 
      IF NEW.`year` <= 1701 OR NEW.`year` >= 2100) THEN 
     SIGNAL SQLSTATE VALUE '45000' 
      SET MESSAGE_TEXT = '[table:section] - `YEAR` column is not valid'; 
    END IF; 
END; 

Пожалуйста Дайте знать, если у вас появятся вопросы!

+0

Это действительно полезно. Большое спасибо. – Uzzal

+0

Uzzal, рад помочь! Пожалуйста, дайте мне знать, если у вас есть другие вопросы! : 0) –

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