2015-08-11 4 views
0

У меня есть простая таблица в MySQL, которая содержит два столбца: Timestamp и floats. Все, что мне нужно, это убедиться, что новое вставленное значение больше, чем любое другое в таблице. Как я могу достичь этого надлежащего пути?CHECK constrain в MySQL

CREATE TABLE IF NOT EXISTS `mydb`.`table1` (
    `timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    `read` FLOAT UNSIGNED NOT NULL, 
    PRIMARY KEY (`timestamp`)) 
ENGINE = InnoDB; 

ответ

1
CREATE TRIGGER TRG_CHECKCONSTRAINT 
BEFORE INSERT ON TABLE1 
FOR EACH ROW 
BEGIN 
DECLARE msg varchar(255); 
IF NOT new.READ > (SELECT MAX(READ) FROM TABLE1) THEN 
SET msg = 'INVALID DATA' 
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = msg; 
END IF; 
END 
+0

Я думаю, мне также нужно добавить 'DELIMETER $$' before и 'DELIMETER;' после кода выше. Но я все еще получаю ошибку: ERROR 1064 (42000): у вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии сервера MySQL, для правильного синтаксиса, используемого рядом с '' SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = msg; END IF; END' 'в строке 8 Я использую 'Server version: 5.5.44-0 + deb7u1 (Debian)', если это имеет значение ... – user31027

+0

Поддерживается в версии 5.5. –

0

Используйте триггер ДО НАЧАЛА ВСТАВКИ. MySQL не использует ограничения CHECK.