MySQL 替换为具有唯一约束的行为
MySQL replace into behavior with unique constraint
我有一个关于 MySQL 行为的快速问题。
假设一个 table 有 3 个(相关)列:
id (PK + AI),somedate,someuser,etc...
我对(日期,用户)设置了唯一约束。所以当我开始一个干净的测试 table 和 运行 以下查询两次:
REPLACE INTO `testtable` (somedate,someuser) VALUES('2017-01-01','admin');
我希望在 1 上有一个 'id' 列的行。但是每次我 运行 这个查询时,id 因为自动递增而上升,我不能让这种情况发生(这会破坏我的数据关系)。为什么是这样?我可以这样做以便在发生替换时保留原始主键吗?
不适用于 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 值。)
在我看来你实际上想要一个 UPDATE
语句而不是
update `testtable`
set somedate = '2017-01-01',
someuser = 'admin'
where id = <id of the record> ;
我有一个关于 MySQL 行为的快速问题。
假设一个 table 有 3 个(相关)列:
id (PK + AI),somedate,someuser,etc...
我对(日期,用户)设置了唯一约束。所以当我开始一个干净的测试 table 和 运行 以下查询两次:
REPLACE INTO `testtable` (somedate,someuser) VALUES('2017-01-01','admin');
我希望在 1 上有一个 'id' 列的行。但是每次我 运行 这个查询时,id 因为自动递增而上升,我不能让这种情况发生(这会破坏我的数据关系)。为什么是这样?我可以这样做以便在发生替换时保留原始主键吗?
不适用于 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 值。)
在我看来你实际上想要一个 UPDATE
语句而不是
update `testtable`
set somedate = '2017-01-01',
someuser = 'admin'
where id = <id of the record> ;