Multi-table DELETE and Foreign Key (bad affected rows)

Rin

*
Multi-table DELETE and Foreign Key (bad affected rows)

Всем привет!

Кажется я обнаружил ошибку в mySQL при удалении нескольких таблиц. Посмотрите внимательно на мой тестовый файл. В последнем запросе mySQL возвращает affected rows = 1, а должно быть 3.

Что бы сразу стало понятно, отношения между таблицами через внешний ключ по полю id вот такие:
t3.id -> t2.id -> t1.id

У меня mySQL 4.0.18

test.sql
-------------------------
[sql]
#CREATE DATABASE `test`;

CREATE TABLE `t1` (
`id` int( 11 ) NOT NULL AUTO_INCREMENT ,
PRIMARY KEY ( `id` )
) TYPE = InnoDB AUTO_INCREMENT =2;# MySQL returned an empty result set (i.e.
zero rows).

INSERT INTO `t1`
VALUES ( 1 ) ;# Affected rows:1

CREATE TABLE `t2` (
`id` int( 11 ) NOT NULL default '0',
UNIQUE KEY `id` ( `id` ) ,
CONSTRAINT `t1_id_fk` FOREIGN KEY ( `id` ) REFERENCES `t1` ( `id` )
) TYPE = InnoDB;# MySQL returned an empty result set (i.e. zero rows).

INSERT INTO `t2`
VALUES ( 1 ) ;# Affected rows:1

CREATE TABLE `t3` (
`id` int( 11 ) NOT NULL default '0',
KEY `id` ( `id` ) ,
CONSTRAINT `t2_id_fk` FOREIGN KEY ( `id` ) REFERENCES `t2` ( `id` )
) TYPE = InnoDB;# MySQL returned an empty result set (i.e. zero rows).

INSERT INTO `t3`
VALUES ( 1 ) ;# Affected rows:1

DELETE t3, t2, t1
FROM t1, t2, t3
WHERE t1.id =1 AND t2.id = t1.id AND t3.id = t2.id;# Affected rows:1
[/sql]
-------------------------
 

Апельсин

Оранжевое создание
А ты проверь сколько он у тебя строк удаляет.
У меня - 1, и возвращает соответственно тоже одну.
а SHOW INNODB STATUS показывает Foreign key constraint fails ..
 

Rin

*
Последний запрос должен удалить по одной записи из каждой таблицы. Сначала из t3, потом из t2, и последняя t1. Если удалять именно в этой последовательности, то ошибок с внешними ключами быть не должно.
В реальности удаляется только запись из таблицы t3, что не есть правильно.

Похоже, что mySQL не понимает, в какой последовательности обрабатывать таблицы.

В моем проекте пришлось сделать это через 3 запроса DELETE c использованием транзакции...

-~{}~ 20.02.04 03:59:

В 4.0.19 этот баг будет исправлен.

МySQL будет выдавать ошибку (и делать откат)

А вот учить ее удалять таблицы в нужном порядке пока, как я понял, не собираются...

http://bugs.mysql.com/2799
 
Сверху