check tuts nicht. Aber die Lösung mit Procedur und Trigger tut es.
- Hat den Vorteil, dass die View nicht umgangen werden kann.
- Hat den Vorteil. dass die Prozedur leicht um weitere Fehlerprüfungen und individuelle Fehlernummern ergänzt werden kann.
CREATE TABLE Dokument ( D_Name VARCHAR(100) NOT NULL);
# Query OK, 0 rows affected (0,02 sec)
DELIMITER $
CREATE PROCEDURE `check_Dokument`(IN D_Name varchar( 100 ) )
BEGIN
IF D_NAME LIKE "" THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'D_NAME was empty';
END IF;
END$
# Query OK, 0 rows affected (0,02 sec)
CREATE TRIGGER `Dokument_before_insert` BEFORE INSERT ON `Dokument`
FOR EACH ROW
BEGIN
CALL check_Dokument(new.D_Name);
END$
# Query OK, 0 rows affected (0,02 sec)
CREATE TRIGGER `parts_before_update` BEFORE UPDATE ON `Dokument`
FOR EACH ROW
BEGIN
CALL check_Dokument(new.D_Name);
END$
# Query OK, 0 rows affected (0,00 sec)
DELIMITER ;
INSERT INTO Dokument (D_Name) values ("foo");
# Query OK, 1 row affected (0,01 sec)
INSERT INTO Dokument (D_Name) values ("");
# ERROR 1644 (45000): D_NAME was empty