在MYSQL中,如果在自动提交为ON的情况下执行了条件插入,即
set autocommit true;
insert into blah (x,y,z) values (1,2,3) where not exists (.....);
以上语句是否可以自动执行并同时提交?还是在执行插入与执行提交之间可能会有延迟?
它的工作方式与不使用自动提交的方式相同,但是您开始一个新的事务,立即执行INSERT,然后立即提交,没有延迟。
START TRANSACTION;
INSERT ...
COMMIT;
这是原子的,在某种意义上,没有其他客户端会看到您的INSERT处于部分完成状态。原子性不关乎速度,而是关乎确保更改已完全提交或根本不提交。其他会话看不到半承诺状态。
顺便说一下,您显示的语法INSERT INTO ... VALUES ... WHERE NOT EXISTS ...
没有意义。 INSERT
没有WHERE
子句。您可能会想到INSERT
使用SELECT
语句输出的行:
INSERT INTO ...
SELECT ... FROM ... WHERE ...;
如果执行此操作,则不会对VALUES()
使用INSERT
子句。