phpmyadmin中触发器创建错误

时间:2013-12-05 13:56:14

标签: mysql phpmyadmin

我创建了非常简单的triger,我认为syntex也是正确的:

    CREATE TRIGGER trig1 after INSERT ON urlcontent for each row
BEGIN
    insert into userpost(userid,url,hash) values (userid,url,hash);
END;

给出错误:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 3

两个表的结构:

CREATE TABLE urlcontent (
  userid text NOT NULL,
  url varchar(255) NOT NULL,
  `desc` varchar(2048) NOT NULL,
  preview varchar(255) NOT NULL,
  img_url varchar(128) NOT NULL,
  title varchar(128) NOT NULL,
  `hash` varchar(128) NOT NULL,
  rate varchar(20) DEFAULT NULL,
  `time` varchar(64) DEFAULT NULL,
  sentiment varchar(32) DEFAULT NULL,
  `subject` varchar(64) DEFAULT NULL,
  PRIMARY KEY (`hash`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

-- --------------------------------------------------------

--
-- Table structure for table 'userpost'
--

CREATE TABLE userpost (
  userid varchar(40) NOT NULL DEFAULT '',
  url varchar(255) DEFAULT NULL,
  `desc` varchar(2048) DEFAULT NULL,
  preview varchar(255) DEFAULT NULL,
  img_url varchar(128) DEFAULT NULL,
  title varchar(128) DEFAULT NULL,
  `hash` varchar(128) NOT NULL DEFAULT '',
  rate varchar(16) DEFAULT NULL,
  `time` varchar(64) DEFAULT NULL,
  pcount varchar(16) DEFAULT NULL,
  ncount varchar(16) DEFAULT NULL,
  isset varchar(16) DEFAULT NULL,
  sentiment varchar(32) DEFAULT NULL,
  `subject` varchar(64) DEFAULT NULL,
  PRIMARY KEY (userid,`hash`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

hash和url是userpost table /

中的关键

两个表的结构

1 个答案:

答案 0 :(得分:4)

您的具体错误可能是由于分隔符定义为;

如果您将分隔符更改为|(在查询编辑器下方的框中),如下图所示,它将起作用:

enter image description here

这有助于创建触发器而不会在第一个;停止查询。

这样可行,但要将urlcontent中的值插入userpost,您必须在值之前添加关键字NEW。这告诉触发器您要在userpost中插入的值是刚插入urlcontent的值:

CREATE TRIGGER trig1 AFTER INSERT ON urlcontent 
FOR EACH ROW
BEGIN
    insert into userpost(userid,url,hash) values (NEW.userid,NEW.url,NEW.hash);
END;
|