2012-06-25 84 views
0

表:項目 創建表:mysql的觸發不插入工作

CREATE TABLE `items` (
    `ite_id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `itemName` varchar(40) DEFAULT NULL, 
    `itemNumber` int(10) unsigned NOT NULL, 
    PRIMARY KEY (`ite_id`), 
    UNIQUE KEY `itemName` (`itemName`) 
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1 


delimiter | 

create trigger item_beforeinsert before insert on items 
    for each row begin 
    if new.itemNumber < 50 then 
     set new.ite_id = null; 
    end if; 
end; 
| 

現在下面的命令不會導致觸發

insert items(itemname, itemnumber) values ('xyz', 1); 

任何幫助將非常感謝,謝謝!

回答

0

您的ite_ID不爲空,您希望將其設置爲空,並且您的觸發器是自動增量,因此您無法'控制'將所有值分配給該字段,IE不會覆蓋值

+0

是的,這就是我一直在尋找的。在不是auto_increment的列上使用觸發器時會起作用。 – m33r

0

這將會是

insert INTO items(itemname, itemnumber) values ('xyz', 1); 

還,因爲你已經設置ite_idNOT NULL,你不能使用set new.ite_id = null;

+0

不,這不是問題。插入正在工作,但觸發器未執行。 set new.ite_id = null應該會導致一個錯誤,它會停止插入。 – m33r

0

對於自動遞增的主鍵字段,你可以同時插入傳遞NULL值。 MySQL自動分配自動生成的值。這不是一個錯誤設置爲NULL 之前插入。因此觸發器沒有引發錯誤。

insert into items(ite_id, ...) values (null, ...); 

上面的語句是有效的和作品,因爲ite_id場是自動遞增的主鍵。