То есть на момент UPDATE phone_client_item_1 уже имеется соответствующая запись в phone_item_number_1?
UPDATE phone_client_item_1 SET cid=6968, type=1, source_id=7, date1=DATE'2021-01-13', date2=NULL, comment='[LOCAL] ???? ?????', object_id=14, alias='' WHERE id=4990
SELECT number INTO num FROM phone_item_number_1 WHERE item_id = id;
INSERT INTO object_param_value_text (object_id, param_id, value) VALUES (NEW.object_id, 1, num);
SELECT number INTO num FROM phone_item_number_1 WHERE item_id = 2105;
INSERT INTO object_param_value_text (object_id, param_id, `value`) VALUES ( 14, 1, '88005553535')
CREATE TABLE `phone_client_item_1` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`cid` int(11) NOT NULL DEFAULT 0,
`object_id` int(11) NOT NULL,
`type` tinyint(4) NOT NULL DEFAULT 0,
`source_id` int(11) NOT NULL DEFAULT 0,
`date1` date DEFAULT NULL,
`date2` date DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `date1` (`date1`),
KEY `date2` (`date2`),
KEY `cid` (`cid`),
KEY `object_id` (`object_id`),
KEY `source_id` (`source_id`)
) ENGINE=InnoDB AUTO_INCREMENT=5689 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `object_param_value_text` (
`object_id` int(11) NOT NULL DEFAULT 0,
`param_id` int(11) NOT NULL DEFAULT 0,
`value` varchar(250) NOT NULL DEFAULT '',
PRIMARY KEY (`param_id`,`object_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `object` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`cid` int(11) NOT NULL DEFAULT 0,
`title` varchar(250) NOT NULL DEFAULT '',
`type_id` int(11) NOT NULL DEFAULT 0,
`date1` date DEFAULT NULL,
`date2` date DEFAULT NULL,
`pos` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `cid` (`cid`),
KEY `pos` (`pos`)
) ENGINE=InnoDB AUTO_INCREMENT=35 DEFAULT CHARSET=cp1251 COLLATE=cp1251_general_ci;
CREATE TABLE `phone_item_number_1` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`item_id` int(11) NOT NULL DEFAULT 0,
`number` varchar(50) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
KEY `number` (`number`),
KEY `item_id` (`item_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2117101 DEFAULT CHARSET=cp1251 COLLATE=cp1251_general_ci;
INSERT INTO object_param_value_text (object_id, param_id, `value`) VALUES (NEW.object_id, 1, '123')
Скорее в таблице объектов есть поле связи. Назывется cid. Следовательно 1 объект может ссылаться на 1 договор. Много объектов так же могут ссылаться на 1 договор.
Я бы может и делал как Вы говорите, но это готовое решение которое продается как оно есть. Еще и обновляется. Поэтому нарушать структуру я не могу. Приходится работать с такой базой.
Создаётся Договор - запись в таблице
contract
. В ней есть поле (его нет), которое может быть ссылкой на Объект. Сам объект хранится в таблицеobject
, соответствующее поле для связиcid
. (для оставшихся двух таблиц) Таблицаphone_client_item_1
содержитcid
иid
для таблицcontract
иphone_item_number_1
, связывание происходит по выражениямcontract.id = object.cid = phone_client_item_1.cid
phone_client_item_1.object_id = object.id = object_param_value_text.object.id
phone_client_item_1.id = phone_item_number_1.item_id
Такого варианта не существует если я правильно понял. Мы создаем объект сразу привязанный к договору. Объект не имеет возможности быть созданным без договора.
В общем на существующий договоро сначала создается object
Затем к этому object привязываем уже существующий phone_client_item_1 или создаем его новый и сразу уже привязанным.
После чего мы можем сделать ему UPDATE если хотим скорректировать например название в данном случае
UPDATE object SET title = ...
Но основные характеристики данного объекта хранятся в таблицах object_param_value_тип.параметра
И вносятся подобным образом
Задача создаваемого триггера, определяемого на таблице object при (ДО) выполнении операции UPDATE состоит в том, чтобы получить значение поля number из таблицы phone_item_number и записать его в поле value таблицы object_param_value_text c соответствующим object_id.