Я нахожусь в такой ситуации:
Фон
- У меня есть 2 схемы базы данных с именами "prod" и "stg".
- «prod» содержит 2 таблицы, которые называются «parent» и «child»
- «stg» имеет только таблицу «parent»
- Определение «родительской» таблицы одинаково во всех «prod» иСхемы "stg".
- В случае удаления записей "родительская" таблица определяется как мягкое удаление (логическое удаление, т. е. для delete_flg установлено значение "1"), тогда как для "дочерней" таблицы выполняется истинное удаление (физически).удалить запись)
Цель
Я пытаюсь достичь следующей цели: когда и только когда оба «prod». «parent» и «stg»"." parent "удаляются (независимо от того, физически или логически, или не существует на одной стороне), а затем автоматически каскадно удаляют (удаляют физически) запись в таблице" prod "." child ", чей" SP_ID "совпадает сзначение в "parent".
Например, если у меня есть
"prod"."parent"
+----+---------+--------+
| SP_ID | SP_NAME | DELETE_FLG |
+----+---------+--------+
| 1 | 1 | 1 |
+----+---------+--------+
"prod"."parent"
+----+---------+--------+
| SP_ID | SP_NAME | DELETE_FLG |
+----+---------+--------+
| 1 | 1 | 1 |
+----+---------+--------+
"stg"."parent"
+----+---------+--------+
| SP_ID | SP_NAME | DELETE_FLG |
+----+---------+--------+
| 1 | 1 | 0 |
+----+---------+--------+
"prod"."child"
+----+---------+
| SP_ID | JOB_KEY |
+----+---------+
| 1 | key |
+----+---------+
, если я выполню обновление sql«stg». «parent» устанавливает DELETE_FLG = 1, где SP_ID = 1, что логически удаляет последнюю «существующую» запись в «родительской» таблице с SP_ID 1, тогда запись в «prod». «child» также будет автоматическиphycially удалено mysql.
Вопрос
Я думал о том, чтобы сделать SP_ID в дочерней таблице в качестве внешнего ключа, ссылающегося на тот, что в родительском состоянии (https://dev.mysql.com/doc/refman/8.0/en/create-table-foreign-keys.html) однако, а) я не знаю, можно ли ссылаться на несколько таблиц в схемах difnet, и б) кажется, что mysql поддерживает только каскадную операцию, то есть удаление на родительском элементе, затем удаление дочернего ИЛИ обновление на родительском, а затем обновлениеребенок.Но в моем случае, я хочу обновить родитель, а затем удалить ребенка.
Может кто-нибудь помочь мне здесь, пожалуйста?Возможно ли это достичь в MySQL?или я должен сделать это на прикладном уровне?
Определение таблицы
CREATE TABLE `prod`.`parent` (
`SP_ID` varchar(20) NOT NULL COMMENT '',
`SP_NAME` varchar(100) NOT NULL COMMENT '',
`DELETE_FLG` tinyint(1) NOT NULL DEFAULT '0' COMMENT '',
PRIMARY KEY (`SP_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=''
CREATE TABLE `prod`.`child` (
`SP_ID` varchar(20) NOT NULL COMMENT '',
`JOB_KEY` varchar(11) NOT NULL,
PRIMARY KEY (`SP_ID`,`JOB_KEY`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=''
CREATE TABLE `stg`.`parent` (
`SP_ID` varchar(20) NOT NULL COMMENT '',
`SP_NAME` varchar(100) NOT NULL COMMENT '',
`DELETE_FLG` tinyint(1) NOT NULL DEFAULT '0' COMMENT '',
PRIMARY KEY (`SP_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=''