2015-10-03 4 views
2

Я создал следующую таблицу:MYSQL GUID Trigger

CREATE TABLE GUID(guid BINARY(16),user VARCHAR(16),expire INT(10)); 

Моя цель состоит в том, чтобы создать по умолчанию Guid, если строка имеет справ = нуль. Для этого я создаю триггер:

CREATE TRIGGER default_guid 
BEFORE INSERT ON GUID 
FOR EACH ROW BEGIN 
IF new.guid IS NULL THEN 
SET new.guid = UNHEX(REPLACE(UUID(), '-', '')); 
END IF; 
END; 

Однако я получаю следующую ошибку синтаксиса при создании этого триггера:

ERROR 1064 (42000): У Вас есть ошибка в вашем SQL синтаксис; проверить руководство, которое соответствует Вашей версии сервера MySQL для правого синтаксиса использовать вблизи «» в строке 5

Я попробовал несколько онлайн шашки синтаксических не повезло; где моя синтаксическая ошибка?

+0

настраиваете вы разделитель перед запуском этого заявления? – Mureinik

+0

Нет, я не думал, что это необходимо; Я получаю ту же ошибку, даже когда я ввожу код как однострочный – jkarimi

+0

Несомненно, см. Мой ответ ниже. – Mureinik

ответ

1

По умолчанию MySQL использует точку с запятой (;) для завершения операторов. Однако при создании триггера у вас есть несколько операторов, которые его составляют, поэтому вам нужно сообщить MySQL, что точки с запятой не отмечают, что вы закончили определение триггера, только с этим утверждением. Это может быть сделано путем установки разделителя в другой комбинации символов, например, $$:

-- Set the delimiter to $$ 
DELIMITER $$ 

CREATE TRIGGER default_guid 
BEFORE INSERT ON GUID 
FOR EACH ROW 
BEGIN 
    IF new.guid IS NULL THEN 
     SET new.guid = UNHEX(REPLACE(UUID(), '-', '')); 
    END IF; 
END; 
$$ -- Trigger ends here 

-- Reset the delimiter to ; 
DELIMITER ;