В MySQL оператор ON DELETE CASCADE используется для неявного извлечения соответствующих строк из дочерней таблицы всякий раз, когда строки удаляются из родительской таблицы. Это относительный тип контекстного поведения, связанного с внешним ключом.
Предполагая, что вы создали две таблицы с внешним ключом FOREIGN KEY внутри отношения внешнего ключа, отображая одну родительскую и дочернюю таблицы. После этого, предназначенный для одного FOREIGN KEY, должен быть исправлен, чтобы другой был успешным во время каскадных действий, затем мы указываем оператор ON DELETE CASCADE. Возможно, если один оператор FOREIGN KEY определяет ON DELETE CASCADE, каскадные функции вызовут исключение.
Давайте поймем, как во всей таблице MySQL мы могли бы использовать оператор ON DELETE CASCADE.
Вы должны открыть недавно установленную клиентскую оболочку командной строки в MySQL, чтобы продолжить работу. При открытии вам будет предложено ввести пароль, чтобы продолжить использование клиентской оболочки командной строки MySQL.
Далее мы создадим две таблицы с названиями «order» и «customer». Обе взаимные таблицы связаны с каскадной функцией удаления с использованием внешнего ключа. На этом этапе «order» является родительской таблицей, а дочерняя таблица – «customer». С помощью прилагаемых скриптов вместе с соответствующими записями вы должны построить обе таблицы. Используйте приведенную ниже команду «use», чтобы выбрать базу данных, в которой вы хотите работать, или создать в ней таблицы. Здесь «data» – это база данных, которую мы используем.
>> use data;
Прежде всего, вы должны создать таблицу «order» вместе с ее полями с помощью команды CREATE TABLE, как показано в запросе ниже. Столбец «ID» будет использован в следующей таблице «customer» в качестве внешнего ключа.
>> CREATE TABLE data.order ( ID INT PRIMARY KEY AUTO_INCREMENT NOT NULL, Item VARCHAR(50) NOT NULL, Price VARCHAR(50) NOT NULL);
Добавим данные в эту таблицу. Вы должны выполнить показанные ниже запросы в оболочке командной строки в MySQL и запустить каждую команду отдельно в командной строке или просто добавить все команды в командную строку за один шаг.
Теперь проверим таблицу «order» после внесения в нее значений. Для этой цели вы можете использовать команду SELECT следующим образом:
>> SELECT * FROM data.order;
Вы можете видеть, что данные были успешно сохранены в таблице «order», как и ожидалось.
Теперь настала очередь создать еще одну таблицу под названием «customer».
Во-первых, вы должны ввести ключевое слово «CREATE» вместе с именем таблицы. Затем вам нужно добавить имена полей или столбцов вместе с их типами данных. Вы должны назвать последний столбец, который будет использоваться в качестве внешнего ключа в этой таблице, так же, как вы назвали его в предыдущей таблице. Как вы знаете, столбец «ID» из таблицы «order» использовался в качестве внешнего ключа в таблице «customer» как «OrderID». После этого вы должны добавить ключевое слово «CONSTRAINT», которое используется для инициализации FOREIGN Key, вместе со ссылкой на предыдущую таблицу. Теперь вам нужно использовать оператор «DELETE CASCADE» вместе с ключевым словом «ON».
>> CREATE TABLE data.customer(CustID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,Name VARCHAR(45) NOT NULL,OrderID INT NOT NULL,CONSTRAINT order_id_fk FOREIGN KEY(OrderID) REFERENCES data.order(ID)ON DELETE CASCADE);
После того, как таблица была создана и DELETE CASCADE был успешно применен к этой таблице, пора вставить некоторые значения в эту таблицу. Для этого попробуйте выполнить следующие инструкции одну за другой в клиентской оболочке командной строки в MySQL.
Впоследствии сделайте вставку запросов. Это момент, чтобы проверить таблицу, были ли данные добавлены успешно или нет. Поэтому попробуйте эту команду ниже, чтобы сделать это:
>> SELECT * FROM data.customer;
Здесь вы можете увидеть вывод таблицы, в которой данные эффективно назначены ей и без каких-либо ошибок или сбоев.
Теперь, когда вы удаляете какие-либо данные или строку из родительской таблицы, она также удаляет данные или строку из дочерней таблицы из-за включенного «DELETE CASCADE» на внешнем ключе, упомянутом в дочерней таблице. Давайте сначала попробуем запрос DELETE, а затем проверим результаты. Мы будем удалять данные из таблицы «order», где «ID» равен «11». Если такой же «ID» будет найден в таблице «customer» в столбце внешнего ключа «OrderID», тогда соответствующая строка или данные в таблице «customer» также будут удалены. Для этого попробуйте следующую команду в командной строке:
>> DELETE FROM data. order WHERE ID = ‘11’;
Сначала проверим родительскую таблицу. Затем введите оператор SELECT, указанную ниже, чтобы получить оставшиеся записи таблицы «order» после удаления некоторых записей. Вы увидите, что запись таблицы, где «ID» был «11», была успешно удалена из этой таблицы. Это означает, что относительные записи с одинаковым значением идентификатора «11» также будут удалены из дочерней таблицы.
>> SELECT * FROM data.order;
Получить записи дочерней таблицы с помощью команды SELECT так же просто, как и раньше. Просто попробуйте команду ниже, и вы получите результат.
Получив результаты, вы можете увидеть, что запись «CustID», имеющая значение «1», была полностью удалена. Это связано с тем, что столбец «OrderID» имеет значение «11» в своей первой строке, что приводит к удалению этой строки.
>> SELECT * FROM data.customer;
Когда вы пытаетесь удалить родительскую таблицу с помощью команды DROP, MySQL не позволит вам это сделать. Это связано с тем, что в родительской таблице включен DELETE CASCADE. Итак, чтобы удалить таблицу, вы должны сначала удалить из нее DELETE CASCADE.
Мы закончили с объяснением DELETE CASCADE в MySQL. Чтобы было понятнее, попробуйте больше примеров в конце.
Крутая и понятная статья!!!Такое должно быть объяснение для начинающих разрабов!!
Вопрос: возможно ли добавление зависимости on delete cascade в уже существующую таблицу? Заранее спасибо!!