2014-10-31 90 views
0

我不能得到這個工作,它運行正常,但什麼也沒有發生在插入MySQL的觸發前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; 

我做什麼我錯了?

+0

您沒有正確使用'DELIMITER'。有關示例,請參閱http://stackoverflow.com/questions/8154158/mysql-how-do-i-use-delimiters-in-triggers。 – wolfgangwalther 2014-10-31 00:42:10

回答

0

如果我理解正確,那麼你實際上試圖實現的是對於jo列具有默認值1。在這種情況下不需要before insert trigger。你可以只定義爲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; 
插入,然後進行

表,你將有創紀錄的

ID JA JO 
1 16 1 

看到一個演示Fiddle Here

談論你的創建觸發器語法。嘗試下面修改的觸發代碼

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

我沒有試圖把默認值,這只是一個例子,我的真正目標是以不同的方式轉換日期,如年,月,星期幾等。 – Fabrizio 2014-10-31 06:37:30