Wenn man sich die Erklärung des Parameters max_binlog_stmt_cache_size ansieht, gibt es einen solchen Satz: Wenn nicht-transaktionale Anweisungen innerhalb einer Transaktion mehr als diese viele Bytes Speicher benötigen, generiert der Server einen Fehler.
Also, was sind nichttransaktionale Aussagen?
Suchen Sie unter http://dev.mysql.com/ nach dem Schlüsselwort „nontransactional“. Das erste, das angezeigt wird, ist „Rollback Failure for Nontransactional Tables“.
Was sind also nichttransaktionale Tabellen?
Nicht-transaktionale Tabellen, nicht-transaktionale Tabellen, Tabellen, die keine Transaktionen unterstützen, also Tabellen, die die MyISAM-Speicher-Engine verwenden.
Das Merkmal nicht-transaktionaler Tabellen ist, dass sie kein Rollback unterstützen. Schauen Sie sich das Beispiel unten an
>create table no_trans(id int) ENGINE=MyiSAM; >start transaction; >insert into no_trans values(1); >select * from no_trans; +------+ | id | +------+ | 1 | +------+ 1 row in set (0.00 sec) >rollback; Query OK, 0 rows affected, 1 warning (0.00 sec) >show warnings; +---------+------+---------------------------------------------------------------+ | Level | Code | Message | +---------+------+---------------------------------------------------------------+ | Warning | 1196 | Some non-transactional changed tables couldn't be rolled back | +---------+------+---------------------------------------------------------------+ 1 row in set (0.00 sec) >select * from no_trans; +------+ | id | +------+ | 1 | +------+ 1 row in set (0.00 sec)
Sie können sehen, dass das Rollback von nicht-transaktionalen Tabellen eine Warnung auslöst. Dies zeigt an, dass die nicht-transaktionale Tabelle kein Rollback unterstützt.
Im Vergleich zu Nicht-Transaktionstabellenobjekten unterstützen Transaktionstabellen, z. B. Tabellen, die InnoDB verwenden, Rollback-Vorgänge.
>create table trans(id int); >start transaction; >insert into trans values(1); >select * from trans; +------+ | id | +------+ | 1 | +------+ 1 row in set (0.00 sec) >rollback; Query OK, 0 rows affected (0.00 sec) >select * from trans; Empty set (0.00 sec)
Es kann gefolgert werden, dass nicht-transaktionale Anweisungen Anweisungen bedeuten, die nicht-transaktionale Tabellen betreiben.
max_binlog_stmt_cache_size Dieser Parameter betrifft Nicht-Transaktionstabellen wie MyISAM. Wenn dieser Parameter nicht ausreicht, wird angezeigt, dass mehr Speicherplatz benötigt wird.
max_binlog_cache_size Dieser Parameter betrifft Transaktionstabellen wie InnoDB. Wenn dieser Parameter nicht ausreicht, wird angezeigt, dass mehr Speicherplatz benötigt wird.
Das Obige ist der Inhalt von MySQL-Transaktionstabellen und Nicht-Transaktionstabellen. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn).