【问题标题】:TRIGGER and IF IS NULL触发和如果为空
【发布时间】:2016-06-19 06:29:11
【问题描述】:

如果摘要不存在,我正在尝试为每个博客条目自动生成摘要。 所以,我编写了这个触发器:

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 示例:

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

我插入«NULL»。为什么我的 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;

我想要的很简单: 进行 INSERT 时: 如果摘要为 NULL,则取 «content» 的前 149 个字符并将它们用作摘要。 就是这样……

但是……为什么……它不起作用?

非常感谢您的帮助!

【问题讨论】:

    标签: mysql triggers mariadb


    【解决方案1】:

    您需要引用表中的列。 @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 ;
    

    【讨论】:

      猜你喜欢
      • 2016-01-22
      • 1970-01-01
      • 2011-07-14
      • 2012-04-17
      • 1970-01-01
      • 1970-01-01
      • 2018-02-02
      • 2021-12-04
      • 1970-01-01
      相关资源
      最近更新 更多