2012-12-10 63 views
0

我在插入觸發器後遇到問題。當我在表格中插入數據時,它應該自動更新日期,它應該是當前日期。但是當我執行下面的查詢時,它在我的表中無法正常工作。 第i個創建的表:插入觸發器當前日期未更新後

DROP TABLE IF EXISTS `ignite`.`products`; 
CREATE TABLE `ignite`.`products`(
    `products_id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `products_model` varchar(30) NOT NULL, 
    `model_hash` bigint(20) unsigned NOT NULL, 
    `Product_name` varchar(45) NOT NULL, 
    `created` datetime NOT NULL, 
    PRIMARY KEY (`products_id`) 
) ENGINE=MyISAM AUTO_INCREMENT=977 DEFAULT CHARSET=latin1; 

然後創建該觸發:

use ignite; 
CREATE TRIGGER created_date BEFORE INSERT ON products 
FOR EACH ROW 
SET NEW.created = NOW(); 

但是當我插入此表中的數據:

use ignite; 
INSERT INTO products 
(products_id, products_model, model_hash, Product_name) 
values 
(123, "456645", 457567, "awetert"); 

這是示出了以下錯誤:

field 'created' does not have default value. error-1364 
+0

您的觸發器設置爲在插入之前運行,但您想要更新的這些行尚未存在。另外,由於您可以將創建的列的默認值設置爲CURRENT_TIMESTAMP,因此使用觸發器可以完全不需要更新日期 – WebChemist

回答

0

這是因爲您的INSERT聲明中不包含created值。例如,您需要將它包括在零日期時間值中:

INSERT INTO products 
(products_id, products_model, model_hash, Product_name, created) 
values 
(123, "456645", 457567, "awetert", "0000-00-00 00:00:00");