2016-03-05 71 views
0

我试图为每个博客条目自动生成摘要如果摘要不存在。 所以,我编写此触发器:TRIGGER和IF IS NULL

DELIMITER | 
CREATE TRIGGER trigger_summary 
BEFORE INSERT ON Blog 
FOR EACH ROW 
BEGIN 
IF @summary IS NULL THEN 
    SET @summary=LPAD(@content, 149, '…'); 
END IF; 
END| 

触发正确创建。 但是,当我插入一个没有摘要的新条目时......什么都没有发生。 我不明白为什么,因为汇总值为空。 一个插件的例子,我做:

INSERT INTO Blog(title,summary,content,author) VALUES('Test', NULL, 'Lorem ipsum dolor sit amet, consectetur adipiscing elit……', 2); 

我插入«空»。为什么我的TRIGGER不工作?

如果万一,这里是我的表结构:

CREATE TABLE `Blog` (
    `id` int(10) UNSIGNED NOT NULL, 
    `title` varchar(200) NOT NULL DEFAULT '', 
    `summary` text, 
    `content` text NOT NULL, 
    `author` int(10) UNSIGNED NOT NULL DEFAULT '0', 
    `date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

我要的很简单: 当makink一个INSERT: IF总结为空的话,采取的第一个149字符的«内容»并将其用作摘要。 就是这样...

但是......为什么......它不工作?

非常感谢您的帮助!

回答

0

您需要引用表中的列。 @summary是一个变量:

DELIMITER | 
CREATE TRIGGER trigger_summary 
BEFORE INSERT ON Blog 
FOR EACH ROW 
BEGIN 
    IF new.summary IS NULL THEN 
     SET new.summary = LPAD(new.content, 149, '…'); 
    END IF; 
END| 
DELIMITER ;