InnoDB is a table type which adds transactions, row level locking, and
foreign key constraints to MySQL.
InnoDB is included in all distributions of MySQL-4.0, both in the plain and
the -Max release.
InnoDB in the stable MySQL-Max-3.23 branch is now frozen except for bug
fixes. New InnoDB features will appear in the 4.0 branch or in 4.1.
Compared to 4.0.2, the release 4.0.3 adds new SQL commands:
- SHOW INNODB STATUS returns the output of the InnoDB Monitor to the MySQL
client. This is very useful in performance tuning and finding out the
reasons of transaction deadlocks.
- SET UNIQUE_CHECKS = 0 speeds up disk-bound table imports.
- SET FOREIGN KEY CHECKS = 0 allows one to import table dumps in any order
regardless of foreign key constraints.
- HANDLER commands now work also for InnoDB type tables. In some cases
HANDLER can be used as a substitute of server-side cursors. See the MySQL
manual about the details of HANDLER.
Full changelogs are shown below. Compared to 4.0.2, also all the changes of
3.23.52 are included in 4.0.3.
MySQL/InnoDB-4.0.3, August 28, 2002:
* Removed unnecessary deadlocks when inserts have to wait for a locking
read, update, or delete to release its next-key lock.
* The MySQL HANDLER SQL commands now work also for InnoDB type tables.
InnoDB does the HANDLER reads always as consistent reads. HANDLER is a
direct access path to read individual indexes of tables. In some cases
HANDLER can be used as a substitute of server-side cursors.
* Fixed a bug in 4.0.2: even a simple insert could crash the AIX version.
* Fixed a bug: if you used in a table name characters whose code is > 127,
in DROP TABLE InnoDB could assert on line 155 of pars0sym.c.
* Compilation from source now provides a working version both on HP-UX-11
and HP-UX-10.20. The source of 4.0.2 worked only on 11, and the source of
3.23.52 only on 10.20.
* Fixed a bug: if compiled on 64-bit Solaris, InnoDB produced a bus error at
MySQL/InnoDB-3.23.52, August 16, 2002:
* Many CPU-bound join queries now run faster. On Windows also many other
CPU-bound queries run faster.
* A new SQL command SHOW INNODB STATUS returns the output of the InnoDB
Monitor to the client. The InnoDB Monitor now prints detailed info on the
latest detected deadlock.
* InnoDB made the SQL query optimizer to avoid too much index-only range
scans and choose full table scans instead. This is now fixed.
* "BEGIN" and "COMMIT" are now added in the binlog around transactions. The
MySQL replication now respects transaction borders: a user will no longer
see half transactions in replication slaves.
* A replication slave now prints in crash recovery the last master binlog
position it was able to recover to.
* A new setting innodb_flush_log_at_trx_commit=2 makes InnoDB to write the
log to the operating system file cache at each commit. This is almost as
fast as the setting innodb_flush_log_at_trx_commit=0, and the setting 2 also
has the nice feature that in a crash where the operating system does not
crash, no committed transaction is lost. If the operating system crashes or
there is a power outage, then the setting 2 is no safer than the setting 0.
* Added checksum fields to log blocks.
* SET FOREIGN_KEY_CHECKS=0 helps in importing tables in an arbitrary order
which does not respect the foreign key rules.
* SET UNIQUE_CHECKS=0 speeds up table imports into InnoDB if you have UNIQUE
constraints on secondary indexes.
* SHOW TABLE STATUS now lists also possible ON DELETE CASCADE or ON DELETE
SET NULL in the comment field of the table.
* When CHECK TABLE is run on any InnoDB type table, it now checks also the
adaptive hash index for all tables.
* If you defined ON DELETE CASCADE or SET NULL and updated the referenced
key in the parent row, InnoDB deleted or updated the child row. This is now
changed to conform to SQL-92: you get the error 'Cannot delete parent row'.
* Improved the auto-increment algorithm: now the first insert or SHOW TABLE
STATUS initializes the auto-inc counter for the table. This removes almost
all surprising deadlocks caused by SHOW TABLE STATUS.
* Fixed a bug: If you updated the primary key of a table so that only the
case of characters changed, that could cause assertion failures, mostly in
page0page.ic line 515.
* Fixed a bug: If you delete or update a row referenced in a foreign key
constraint and the foreign key check has to wait for a lock, then the check
may report an erroneous result. This affects also the ON DELETE...
* Fixed a bug: A deadlock or a lock wait timeout error in InnoDB causes
InnoDB to roll back the whole transaction, but MySQL could still write the
earlier SQL statements to the binlog, even though InnoDB rolled them back.
This could, for example, cause replicated databases to get out-of-sync.
* Fixed a bug: If the database happened to crash in the middle of a commit,
then the recovery might leak tablespace pages.
* Fixed a bug: If you specified a non-latin1 character set in my.cnf, then,
in contrary to what is stated in the manual, in a foreign key constraint a
string type column had to have the same length specification in the
referencing table and the referenced table.
* Fixed a bug: DROP TABLE or DROP DATABASE could fail if there
simultaneously was a CREATE TABLE running.
* Fixed a bug: If you configured the buffer pool bigger than 2 GB in a
32-bit computer, InnoDB would assert in buf0buf.ic line 214.
* Fixed a bug: on 64-bit computers updating rows which contained the SQL
NULL in some column could cause the undo log and the ordinary log to become
* Fixed a bug: innodb_log_monitor caused a hang if it suppressed lock prints
for a page.
* Fixed a bug: in the HP-UX-10.20 version mutexes would leak and cause race
conditions and crashes in any part of InnoDB code.
* Fixed a bug: if you ran in the AUTOCOMMIT mode, executed a SELECT, and
immediately after that a RENAME TABLE, then RENAME would fail and MySQL
would complain about error 1192.
http://www.innodb.com, download MySQL/InnoDB from http://www.mysql.com