是否可以在 MySQL 中创建原子事务?
考虑我有这些行的表“类别”:
id|name
--|---------
1 |'tablets'
2 |'phones'
Run Code Online (Sandbox Code Playgroud)
而 columnname是我的主键。
如果我尝试:
START TRANSACTION;
update "category" set name = 'phones' where id = 1;
update "category" set name = 'tablets' where id = 2;
COMMIT;
Run Code Online (Sandbox Code Playgroud)
我越来越:
ERROR: duplicate key value violates unique constraint
"category_name_key"
DETAIL: Key (name)=(tablets) already exists.
Run Code Online (Sandbox Code Playgroud)
我的期望是约束检查应该只在提交期间进行。这可以用 MySQL 吗?
这是不可能的,因为 mysql MySQL 进程更新在每个单行更新后强制检查 UNIQUE(和其他)约束,而不是在整个 UPDATE 语句完成后 - 正如它应该做的那样。
那么你应该使用中间更新
update "category" set name = 'temp' where id = 1;
update "category" set name = 'tablets' where id = 2;
update "category" set name = 'phone' where id = 1;
Run Code Online (Sandbox Code Playgroud)