Удалять в водопаде в MySQL с DELETE

У меня есть 3 подмостков в моей базе данных MySQL.

Clientes (existe el DNI)
Clientes_compra (puede existir el DNI o quizás no).
Clientes_alquiler (puede existir el DNI o quizás no).

Мое намерение состоит в том, чтобы просить из-за программы Java textfield_DNI, и если он совпадает с одним DNI таблицы clientes что это удалил из этой таблицы и из других два, если он существует.

DELETE FROM clientes WHERE dni="13225217P";
DELETE FROM clientes_compra WHERE dni="13225217P";
DELETE FROM clientes_alquiler WHERE dni="13225217P";

Я думаю, что существует уничтожение в водопаде (CASCADE ON): как он был бы в единственной консультации и не быть должное использовать 3?

Ejecucción ошибки:

Cannot delete or update a parent row: a foreign key constraint fails (`osmarentcars`.`clientes_alquiler`, CONSTRAINT `FK_CLIENTES_ALQUILER1` FOREIGN KEY (`DNI`) REFERENCES `clientes` (`DNI`))
1
задан 23.01.2017, 06:49
0 ответов

Если ты хочешь использовать один CONSTRAINT, то, что ты должен делать, состоит в том, чтобы объявлять один FOREIGN KEY, соединение между полями dni подмостков. В MySql видят например в CREATE TABLE clientes_compra как:

 FOREIGN KEY (dni) REFERENCES clientes (dni) ON DELETE CASCADE

Я это не рекомендую. Это значит, что в случае, который ты удаляешь клиент, исчезают автоматически все покупки с той же стоимостью dni, без ошибки, не спрашивая.

В идеальном случае ты объявляешь сделку, и снопы 3 консультации, удаляя сначала линии в зависимых подмостках и наконец вход в клиентов.

Нет никакого логического разума того, чтобы становиться слабым с парой линий кода, жертвуя хорошую концепцию безопасности данных в процессе.

Если ты настаиваешь по какому-то разуму того, чтобы это делать с консультацией, что было бы должно функционировать, (если я помню хорошо sequencia, в котором BD удаляет)

DELETE ca, cc, c 
FROM clientes_alquilier ca 
LEFT JOIN clientes_compra cc 
    ON ca.dni = cc.dni 
LEFT JOIN clientes c 
    ON c.dni = cc.dni 
WHERE c.dni = "13225217P";
3
ответ дан 03.12.2019, 17:37
  • 1
    Тогда он не стоит мне. Я gustarí в который он удалит данные, соответствующие этому удостоверению личности в таблице клиенты как в подмостках clientes_compra или clientes_alquiler так (он зависит, если он существует в этих или не). –  20.01.2017, 00:20
  • 2
    Извини, он делает точно то, что ты хочешь, я буду доводить до сведения это в ответе. То, в чем я сомневаюсь, состоит в том, что ты хочешь , делать это, достаточно рискованное. –  20.01.2017, 00:25
  • 3
    ¿ Тогда có mo quedarí в консультацию? –  20.01.2017, 00:26
  • 4
    Я буду разрабатывать в ответе. –  20.01.2017, 00:33

Я думаю, что это - то, что ты ищешь

DELETE c, cc, ca 
FROM clientes c 
LEFT JOIN clientes_compra cc 
    ON c.dni = cc.dni 
LEFT JOIN clientes_alquiler ca 
    ON ca.dni = c.dni 
WHERE c.dni = "13225217P";
2
ответ дан 03.12.2019, 17:37
  • 1
    Этот mé все не состоит в том, что ты спросил, но лучшее решение для твоей причины. Лучше, что использовать один CONSTRAINT с ON DELETE CASCADE, потому что он ничего не делает implí я назначаю встречу. –  20.01.2017, 00:15
  • 2
    Синтаксис está хорошо, но есть ошибка в твоем có я говорю. –  20.01.2017, 00:19
  • 3
    MySQL сказал: Documentació n #1451 - Cannot delete or update в parent row: в foreign key constraint fails (osmarentcars. clientes_compra, CONSTRAINT FK_CLIENTES_COMPRA1 FOREIGN KEY (DNI) REFERENCES clientes (DNI)) –  20.01.2017, 00:19
  • 4
    Ах, у тебя уже есть FOREIGN KEYS. có я говорю эту хорошо, твоя концепция это не. В действительности эти CONSTRAINTS точно, чтобы защищается вызывания неосновательности в твоем BD, и даже, что ты используешь, потом ты спрашиваешь, как предотвращать, что они не беспокоят тебя. Это как устанавливание трех висячих замков в двери для despué s оставлять ее открытой, потому что он беспокоит всегдашний быть должное идти с ключами. –  20.01.2017, 00:32
  • 5
    Это, у меня уже есть они в creació n подмостков. ¿ Из-за qué он дает мне ошибку? –  20.01.2017, 00:33