我正在使用MYSQL 5.1.38,我有以下表格:
create table table1 (
col1 varchar(50) primary key not null,
ts1 timestamp not null default current_timestamp on update current_timestamp
)engine=innodb;
create table table2 (
col1 varchar(50) not null,
ts2 timestamp not null default current_timestamp on update current_timestamp,
foreign key (col1) references table1 (col1) on update cascade on delete cascade
)engine=innodb;
当我更新table1中的col1时,table1中的ts1和table2中的col1会更新,但table2中的ts2不会更新。
这是输出:
mysql> insert into table1 (col1) values ('test'); Query OK, 1 row affected (0.00 sec) mysql> insert into table2 (col1) values ('test'); Query OK, 1 row affected (0.00 sec) mysql> select * from table1; +------+---------------------+ | col1 | ts1 | +------+---------------------+ | test | 2013-05-17 09:37:56 | +------+---------------------+ 1 row in set (0.00 sec) mysql> select * from table2; +------+---------------------+ | col1 | ts2 | +------+---------------------+ | test | 2013-05-17 09:38:03 | +------+---------------------+ 1 row in set (0.01 sec) mysql> update table1 set col1='test1' where col1 = 'test'; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> select * from table1; +-------+---------------------+ | col1 | ts1 | +-------+---------------------+ | test1 | 2013-05-17 09:44:28 | +-------+---------------------+ 1 row in set (0.00 sec) mysql> select * from table2; +-------+---------------------+ | col1 | ts2 | +-------+---------------------+ | test1 | 2013-05-17 09:38:03 | +-------+---------------------+ 1 row in set (0.00 sec)
我希望ts2也能更新。 这是预期的行为吗?
答案 0 :(得分:2)
这是MySQL的一个严重问题。
如果您尝试使用 on update 或 on delete 触发器,则同样适用。正如预期的那样,即使在外键更新或删除时也会触发,但它们不会。
没有简单的解决方法。
这是一个严重的ACID合规性故障,在大约10年前首次报告并且仍然没有修复。阅读this bug report。
答案 1 :(得分:0)
是的,这是按设计运作的。您根本没有更新table2。