简体   繁体   English

插入之前MySQL触发

[英]MySQL TRIGGER BEFORE INSERT

I cant get this to work, it runs OK, but nothing happens in insert 我无法使它正常工作,它运行正常,但插入时无任何反应

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;

What im i doing wrong?? 我在做什么错?

if I have understood correct then what you are actually trying to achieve is to have a default value of 1 for the column jo . 如果我理解正确,那么您实际要实现的是将jo列的默认值设置为1 in such case no need of a before insert trigger . 在这种情况下,不需要before insert trigger You can just define that as default value for that column while creating the table like 您可以在创建表时将其定义为该列的default value ,例如

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;

Then after insertion, you will have a record as 然后插入后,您将有一条记录为

ID  JA  JO
1   16  1

See a demo Fiddle Here 在这里观看演示小提琴

Talking about your create trigger syntax. 谈论您的创建触发器语法。 Try the below modified trigger code 试试下面修改后的触发代码

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM