插入前的MySQL触发器

插入前的MySQL触发器,mysql,triggers,Mysql,Triggers,我不能让这个工作,它运行正常,但没有发生任何事情在插入 DROP TRIGGER IF EXISTS test; DELIMITER $$ CREATE TRIGGER test BEFORE INSERT ON prueba FOR EACH ROW BEGIN SET NEW.jo=1 END DELIMITER $$; insert into prueba (ja) values (16); CREATE TABLE

我不能让这个工作,它运行正常,但没有发生任何事情在插入

DROP TRIGGER IF EXISTS test;
DELIMITER $$
CREATE
    TRIGGER test BEFORE INSERT 
    ON prueba 
    FOR EACH ROW     
    BEGIN
        SET NEW.jo=1
    END
DELIMITER $$;
insert into prueba (ja) values (16);

CREATE TABLE `prueba` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `ja` int(11) DEFAULT NULL,
  `jo` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

LOCK TABLES `prueba` WRITE;

我做错了什么???

如果我理解正确,那么您实际试图实现的是将
jo
列的默认值设置为
1
。在这种情况下,插入触发器之前不需要
。在创建表时,您可以将该列定义为
默认值

CREATE TABLE `prueba` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `ja` int(11) DEFAULT NULL,
  `jo` int(11) DEFAULT 1, <-- Notice This Line
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
观看演示

讨论您的创建触发器语法。尝试下面修改的触发器代码

DELIMITER $$
CREATE TRIGGER test BEFORE INSERT ON prueba 
    FOR EACH ROW  
    BEGIN   
        SET NEW.jo=1;
    END$$
DELIMITER ;

您没有正确使用分隔符
。例如,我并没有试图设置默认值,这只是一个例子,我真正的目标是以不同的方式转换日期,比如年、月、星期几等等。
DELIMITER $$
CREATE TRIGGER test BEFORE INSERT ON prueba 
    FOR EACH ROW  
    BEGIN   
        SET NEW.jo=1;
    END$$
DELIMITER ;