У меня есть 2 таблицы: bases
(родительский) и base_formula
(дочерний).
Что мне нужно, так это дублирование дочерних данных, когда родительский объект копируется (создается).
Вот моя оценка:
CREATE TABLE `bases` (
`base_id_pk` int(11) NOT NULL,
`base_duplicate` int(11) DEFAULT NULL,
`base_id` int(11) NOT NULL,
`base_desc` varchar(40) NOT NULL,
`base_material` int(11) NOT NULL,
`base_material_percent` varchar(50) DEFAULT NULL,
`target_sg` decimal(4,3) NOT NULL,
`base_material_unit` varchar(4) NOT NULL,
`cost_per_kg` varchar(20) DEFAULT '0',
`bulk_base_liquid_id` int(11) DEFAULT NULL,
`micro_sample` tinyint(4) NOT NULL,
`base_version` varchar(10) NOT NULL,
`mod_by` varchar(100) DEFAULT NULL,
`mod_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`change_reason` varchar(200) DEFAULT NULL,
`superseeds` varchar(100) DEFAULT NULL,
`department` varchar(150) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `base_formula` (
`id` int(11) NOT NULL,
`base_id` int(11) NOT NULL,
`raw_material_id` varchar(1120) NOT NULL,
`percent` decimal(7,4) DEFAULT NULL,
`dispense` int(11) DEFAULT '1',
`ignore_step` int(11) DEFAULT NULL,
`main_ingredient` int(5) NOT NULL DEFAULT '0',
`cost_of_use` decimal(6,3) DEFAULT NULL,
`active_flag` int(5) DEFAULT NULL,
`test` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
base_id
на base_formula
- это FK, связанный с base_id_pk
на базах.
У меня есть base_duplicate
,это поле, которое я собирался использовать для привязки к родительскому идентификатору, из которого я хотел дублировать дочерние данные.
Я после создания триггера BEFORE INSERT
, если это возможно.Мои предыдущие попытки вызвали ошибки MySQL:
CREATE TRIGGER `insert_base_duplication_formula` BEFORE INSERT ON `bases`
FOR EACH ROW INSERT INTO base_formula(base_id,raw_material_id,percent,dispense,ignore_step,main_ingredient,cost_of_use,active_flag)
SELECT
NEW.base_id_pk,
bf.raw_material_id,
bf.percent,
bf.dispense,
bf.ignore_step,
bf.main_ingredient,
bf.cost_of_use,
0
FROM base_formula bf
WHERE NEW.base_duplicate IS NOT NULL
AND new.base_duplicate=bf.base_id