без for update можно и быстрее будет о_О(а) реализовать поведение AUTO_INCREMENT: скрипты вставляют что-то в базу (сообщение), при этом в колонке ID должен записываться последовательно увеличающийся номер, без дыр, без наложения данных, без дублирования ID.
create table max_ids (a int(11)) engine=innodb;
insert into max_ids values(0);
create table omg (a int(11)) engine=innodb;
start transaction;
update max_ids set a = a+1;
insert into omg(a) select a from max_ids;
commit;
You are allowed to specify DUAL as a dummy table name in situations where no tables are referenced:
mysql> SELECT 1 + 1 FROM DUAL;
-> 2
DUAL is purely for the convenience of people who require that all SELECT statements should have FROM and possibly other clauses. MySQL may ignore the clauses. MySQL does not require FROM DUAL if no tables are referenced.
Автор оригинала: Sherman
Эта тема является не просто источником нескончаемого получения лулзов, но отлично показывает, что "знание" mysql - это на самом деле, знание всяческих мелких хаков, фишичек и прочих затычек, которыми программисты mysql пытаются затыкать баги в своей СУБД, вместо того, чтобы, не изобретая велосипед, просто реализовывать стандарт.