我有一个关于MySQL行为的快速问题。
想象一下包含3个(相关)列的表:
id (PK + AI),somedate,someuser,etc...
我在(日期,用户)上添加了一个唯一约束。因此,当我从一个干净的测试表开始并运行以下两次查询时:
REPLACE INTO `testtable` (somedate,someuser) VALUES('2017-01-01','admin');
我期望在1上使用'id'列的行。但是每次我运行此查询时,由于自动增量而id上升,我不能发生这种情况(这会破坏我的数据关系)。为什么是这样?我可以这样做,以便在更换时可以保留原始主键吗?
答案 0 :(得分:1)
不在REPLACE
。这就像INSERT
之前的DELETE
一样。使用REPLACE
观察到的行为与执行这两个语句时的行为相同:
DELETE FROM `testtable` WHERE somedate = '2017-01-01' and someuser = 'admin';
INSERT INTO `testtable` (somedate,someuser) VALUES ('2017-01-01','admin');
这意味着新插入的行上的auto_increment列将具有新值。
也许考虑使用INSERT ... ON DUPLICATE KEY UPDATE
。
参考:https://dev.mysql.com/doc/refman/5.7/en/insert-on-duplicate.html
(请注意,尝试插入更新的行将使用auto_increment值。)
答案 1 :(得分:0)
对我而言,您实际上想要一个UPDATE
语句而非
update `testtable`
set somedate = '2017-01-01',
someuser = 'admin'
where id = <id of the record> ;