gpt4 book ai didi

mysql - 表上的更新更改另一个表中的字段

转载 作者:行者123 更新时间:2023-11-29 06:20:00 25 4
gpt4 key购买 nike

我正在开发一个处理一些订单的网络应用程序。

我有两个表定义为

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)

订单处理由两个不同时间的步骤组成:

  1. 插入带有特定 date_open 和 null sent_order_id 的订单

    insert into orders (...,date_open,..) values(...,?,...)
  2. 插入一个带有不同 date_open 的 sent_order

    insert into sent_orders (...,date_open,..) values(...,?,...)
  3. 对订单表进行更新以在 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实例:

  • bitnami wampstack-5.4.25-0 和 MySQL Server 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 列。

关于mysql - 表上的更新更改另一个表中的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33768757/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com