Как вы можете помешать INSERT выполнить таблицу, используя условия?

У меня вопрос по варианту Alter Table базы данных MySql. Я создал таблицу книг:

CREATE TABLE Libro(
    id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    Nombre VARCHAR(100),
    id_Tipo INT NOT NULL,
    Activo ENUM('0','1'),
    FOREIGN KEY (id_Tipo) REFERENCES TipoLibro (id) ON DELETE CASCADE ON UPDATE CASCADE
);

В этой таблице я хочу создать ограничение, которое не позволяет мне вставлять две книги с одинаковым Именем и одинаковым type_id при Activo='1'. Когда Activo='0' вы должны разрешить мне вставку.

Далее я покажу код, который у меня есть, для соответствующей таблицы изменений:

ALTER TABLE Libro ADD CONSTRAINT NombreTipo UNIQUE (Nombre,id_Tipo); 

Я надеюсь, что вы можете мне помочь и подсказать, как создать ограничение в базе данных, которое не позволяет мне Делай выше.

0
задан 15.03.2016, 19:15
1 ответ

UNIQUE KEY он не будет служить в этом случае, потому что тогда у тебя только могло бы быть 2 линии в твоей таблице для 1 типа стоимости Nombre. В твоем случае, если ты хочешь проконтролировать это на уровне базы данных, тебе следовало бы использовать trigger. Здесь пример:

DELIMITER $$
CREATE TRIGGER lol_insert BEFORE INSERT ON lol
FOR EACH ROW BEGIN
    IF EXISTS( SELECT 1 FROM Libro WHERE Nombre = NEW.NOMBRE AND Activo = 1) THEN
        signal SQLSTATE '45000'; -- esto lanza el error
    END IF;
END$$
DELIMITER ;
0
ответ дан 24.11.2019, 14:43