Do not allow dropping a table referenced by a
FOREIGN KEY
constraint, unless the user
does SET FOREIGN_KEY_CHECKS=0
. The error
message here is somewhat misleading ``Cannot delete or
update a parent row...'', and must be changed in a future
version 4.1.x.
Make InnoDB
to remember the
CONSTRAINT
name given by a user for a
FOREIGN KEY
.
Change the print format of FOREIGN KEY
constraints spanning multiple databases to
`db_name`.`tbl_name`
. But when parsing
them, we must also accept
`db_name.tbl_name`
, because that was the
output format in < 4.0.18.
An optimization in locking: If
AUTOCOMMIT=1
, then we do not need to make
a plain SELECT
set shared locks even on
the SERIALIZABLE
isolation level, because
we know that the transaction is read-only. A read-only
transaction can always be performed on the
REPEATABLE READ
level, and that does not
endanger the serializability.
Implement an automatic downgrade from >= 4.1.1 ->
4.0.18 if the user has not created tables in
.ibd
files or used other 4.1.x
features. Consult the
manual section on multiple
tablespaces carefully if you want to downgrade!
Fixed a bug : MySQL should not allow
REPLACE
to internally perform an
UPDATE
if the table is referenced by a
FOREIGN KEY
. The MySQL manual states that
REPLACE
must resolve a duplicate-key
error semantically with DELETE
(s) +
INSERT
, and not by an
UPDATE
. In versions < 4.0.18 and <
4.1.2, MySQL could resolve a duplicate key conflict in
REPLACE
by doing an
UPDATE
on the existing row, and
FOREIGN KEY
checks could behave in a
semantically wrong way. (Bug#2418)
Fixed a bug : generate FOREIGN KEY
constraint identifiers locally for each table, in the form
db_name/tbl_name_ibfk_number
. If the user
gives the constraint name explicitly, then remember it.
These changes should ensure that foreign key id's in a slave
are the same as in the master, and DROP FOREIGN
KEY
does not break replication. (Bug#2167)
Fixed a bug : allow quoting of identifiers in InnoDB's
FOREIGN KEY
definitions with a backtick
(`) and a double quote ("). You can now use also spaces in
table and column names, if you quote the identifiers. (Bug#1725, Bug#2424)
Fixed a bug : FOREIGN KEY ... ON UPDATE/DELETE NO
ACTION
must check the foreign key constraint, not
ignore it. Since we do not have deferred constraints in
InnoDB
, this bugfix makes
InnoDB
to check NO
ACTION
constraints immediately, like it checks
RESTRICT
constraints.
Fixed a bug : InnoDB
crashed in
RENAME TABLE
if
'db_name.tbl_name'
is shorter than 5
characters. (Bug#2689)
Fixed a bug : in SHOW TABLE STATUS
,
InnoDB
row count and index cardinality
estimates wrapped around at 512 million in 32-bit computers.
Note that unless MySQL is compiled with the
BIG_TABLES
option, they will still wrap
around at 4 billion.
Fixed a bug : If there was a UNIQUE
secondary index, and NULL
values in that
unique index, then with the IS NULL
predicate, InnoDB
returned only the first
matching row, though there can be many. This bug was
introduced in 4.0.16. (Bug#2483)
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.