我正在处理处理某些订单的网络应用程序。
我有两个表定义为
CREATE TABLE sent_orders (
id INT NOT NULL AUTO_INCREMENT,
code VARCHAR(45) NOT NULL,
date_open TIMESTAMP NOT NULL,
state VARCHAR(50) NOT NULL,
direction VARCHAR(45) NOT NULL,
PRIMARY KEY (id) )
CREATE TABLE orders (
id INT NOT NULL AUTO_INCREMENT,
state_id INT(11) NOT NULL,
date_open TIMESTAMP NOT NULL,
date_processed TIMESTAMP NULL,
date_closed TIMESTAMP NULL,
sent_order_id INT(11) NULL,
PRIMARY KEY (id) ,
INDEX fk_orders_3_idx (state_id ASC) ,
INDEX fk_orders_5_idx (sent_order_id ASC) ,
CONSTRAINT fk_orders_1
FOREIGN KEY (state_id)
REFERENCES order_states (id)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT fk_orders_2
FOREIGN KEY (sent_order_id)
REFERENCES sent_orders (id)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
订单处理在不同时间由两个步骤组成:
使用特定的date_open和带有
的null sent_order_id插入订单insert into orders (...,date_open,..) values(...,?,...)
使用不同的date_open
插入sent_orderinsert into sent_orders (...,date_open,..) values(...,?,...)
在订单表上进行更新,以在sent_orders
上添加外键update orders set sent_order_id = ? where id = ?
问题在于,当我在订单表上运行更新时,orders.date_open字段会更新当前日期。
另一个奇怪的事情是,为了调试问题,我添加了第二个日期字段' date_open2'在订单表上然后我运行了一个大规模的更新:
alter table orders add date_open2 TIMESTAMP NOT NULL;
update orders set date_open2 = date_open;
现在我跑的时候
select date_open,date_open2,id,sent_order_id from orders
我所拥有的是:
date_open date_open2 id sent_order_id
2015-11-17 23:35:14.0 2015-11-17 23:34:27.0 8654 678
date_open2是原始的date_open,但它应该等于date_open字段!这意味着更新查询获得了正确的日期值,但是当我选择它时,它是错误的。
Mysql实例:
答案 0 :(得分:2)
您的TIMESTAMP
列将按照
11.3.5 Automatic Initialization and Updating for TIMESTAMP
具体地
既没有DEFAULT CURRENT_TIMESTAMP也没有ON UPDATE CURRENT_TIMESTAMP,它与指定DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP相同。
听起来您要么想要修改TIMESTAMP
列的自动更新行为,要么改为使用DATETIME
列。