table 的更新更改了另一个 table 中的字段
Update on a table changes a field in another table
我正在开发一个处理一些订单的网络应用程序。
我有两个 table 定义为
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(...,?,...)
a sent_order插入了不同的date_open
insert into sent_orders (...,date_open,..) values(...,?,...)
更新订单 table 以在 sent_orders
上添加外键
update orders set sent_order_id = ? where id = ?
问题是,当我 运行 更新订单 table 时, orders.date_open 字段会更新为当前日期。
另一个 st运行ge 事情是为了调试问题,我在订单 table 上添加了第二个日期字段 '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字段!这意味着更新查询得到了正确的日期值,但是当我select它时,它是错误的。
Mysql 实例:
- bitnami wampstack-5.4.25-0 与 MySQL 服务器 5.5
您的 TIMESTAMP
列正在自动更新,如
中所述
11.3.5 Automatic Initialization and Updating for TIMESTAMP
具体
With neither DEFAULT CURRENT_TIMESTAMP nor ON UPDATE CURRENT_TIMESTAMP, it is the same as specifying both DEFAULT CURRENT_TIMESTAMP and ON UPDATE CURRENT_TIMESTAMP.
听起来您要么想要修改 TIMESTAMP
列的自动更新行为,要么改用 DATETIME
列。
我正在开发一个处理一些订单的网络应用程序。
我有两个 table 定义为
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(...,?,...)
a sent_order插入了不同的date_open
insert into sent_orders (...,date_open,..) values(...,?,...)
更新订单 table 以在 sent_orders
上添加外键update orders set sent_order_id = ? where id = ?
问题是,当我 运行 更新订单 table 时, orders.date_open 字段会更新为当前日期。
另一个 st运行ge 事情是为了调试问题,我在订单 table 上添加了第二个日期字段 '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字段!这意味着更新查询得到了正确的日期值,但是当我select它时,它是错误的。
Mysql 实例:
- bitnami wampstack-5.4.25-0 与 MySQL 服务器 5.5
您的 TIMESTAMP
列正在自动更新,如
11.3.5 Automatic Initialization and Updating for TIMESTAMP
具体
With neither DEFAULT CURRENT_TIMESTAMP nor ON UPDATE CURRENT_TIMESTAMP, it is the same as specifying both DEFAULT CURRENT_TIMESTAMP and ON UPDATE CURRENT_TIMESTAMP.
听起来您要么想要修改 TIMESTAMP
列的自动更新行为,要么改用 DATETIME
列。