【问题标题】:if with mysql results in syntax error如果使用 mysql 导致语法错误
【发布时间】:2011-09-19 09:11:42
【问题描述】:

我需要在我的 mysql 触发器中使用 if 语句。看起来是这样的:

set @countentry = (SELECT count(id) as `id` FROM `tsc_page_have_wildcard` where idwildcard=1 and idpage=5);
IF  @countentry <> 0 THEN
    INSERT INTO `tsc_page_have_wildcard` (`idpage`, `idwildcard`) VALUES (@pageid, NEW.id);
END IF

通过执行触发器,我得到: 错误代码:1064。您有错误

在您的 SQL 语法中;检查与您的 MySQL 对应的手册 在 'IF @countentry 0 附近使用正确语法的服务器版本 那么

        INSERT INTO `tsc_page_have_wildcard` (`i' at line 1

表结构如下:

CREATE TABLE IF NOT EXISTS `tsc_page_have_wildcard` (
  `id` int(11) NOT NULL auto_increment,
  `idpage` int(11) NOT NULL,
  `idwildcard` int(11) NOT NULL,
  PRIMARY KEY  (`id`),
  KEY `idpage` (`idpage`,`idwildcard`),
  KEY `idwildcard` (`idwildcard`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=8 ;

ALTER TABLE `tsc_page_have_wildcard`
  ADD CONSTRAINT `tsc_page_have_wildcard_ibfk_1` FOREIGN KEY (`idpage`) REFERENCES `tsc_page` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  ADD CONSTRAINT `tsc_page_have_wildcard_ibfk_2` FOREIGN KEY (`idwildcard`) REFERENCES `tsc_wildcard` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;

INSERT INTO `tsc_page_have_wildcard` (`id`, `idpage`, `idwildcard`) VALUES
(1, 1, 1),
(2, 1, 2),
(3, 1, 3),
(4, 1, 4),
(5, 1, 5),
(6, 41, 4),
(7, 41, 5);

如果语句在我的触发器中不起作用,有人知道为什么会这样吗?

【问题讨论】:

    标签: mysql if-statement syntax


    【解决方案1】:

    这段代码应该可以工作:

    DELIMITER $$
    CREATE /*!50017 DEFINER = 'root'@'localhost' */ TRIGGER `win` AFTER INSERT 
    ON `tsc_page_have_wildcard` FOR EACH ROW 
    BEGIN
      SET @countentry = 
      (SELECT 
        COUNT(id) AS `id` 
      FROM
        `tsc_page_have_wildcard` 
      WHERE idwildcard = 1 
        AND idpage = 5) ;
      IF @countentry <> 0 
      THEN 
      INSERT INTO `tsc_page_have_wildcard` (`idpage`, `idwildcard`) 
      VALUES
        (@pageid, NEW.id) ;
      END IF ;
    END $$
    DELIMITER ;
    

    END IF 后的分号(;) :-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-04
      • 2010-11-22
      • 2014-08-21
      • 1970-01-01
      • 1970-01-01
      • 2015-08-17
      • 1970-01-01
      相关资源
      最近更新 更多