Как написать функцию запуска MySQL для передачи некоторого идентификатора в другую таблицу и обновления столбца текущей таблицы - PullRequest
0 голосов
/ 17 декабря 2018

У меня есть таблица ячеек и таблица регионов. Когда я вставляю данные в таблицу ячеек (только идентификатор ячейки, имя ячейки и идентификатор региона), запускается триггер, и я нахожу идентификатор района из таблицы регионов, а также обновляет значение идентификатора района таблицы ячеек.моя любимая таблица ячеек и таблица регионов;

+---------+-----------+-----------+-------------+
| cell_id | cell_name | region_id | district_id |
+---------+-----------+-----------+-------------+
|  000001 | cell1     |         1 |             |
|  000006 | cell6     |         6 |             |
|  000005 | cell5     |         5 |             |
|  000004 | cell4     |         4 |             |
|  000003 | cell3     |         3 |             |
+---------+-----------+-----------+-------------+

это моя таблица регионов;

+----+--------------+-------------+
| id | region_name  | district_id |
+----+--------------+-------------+
|  1 | fort         |           2 |
|  2 | hatton       |           4 |
|  3 | nugegoda     |           2 |
|  4 | wattala      |           2 |
|  5 | Nawala       |           2 |
|  6 | Dickoya      |           4 |
|  7 | kottegallaTT |           3 |
|  8 | Mabola       |           2 |
+----+--------------+-------------+

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

На самом деле вам не нужно это делать.

Столбец идентификатора района в таблице ячеек является избыточным.Если вы просто собираетесь скопировать его из таблицы «Регион», не делайте так: дублированные данные противоречат принципам реляционной базы данных.Это оставит ваши данные ненормализованными.Подумайте - если вы когда-нибудь измените таблицу Region, чтобы изменить, к какому району принадлежит регион (например, из-за реорганизации округов), вам не нужно искать и изменять все строки ячеек для этого региона - это простотрата времени.Основная цель отношений с внешним ключом, таких как связь между ячейкой и регионом, заключается в том, что вам не нужно копировать информацию, относящуюся к региону, на уровень ячейки.

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

Например,

SELECT *
FROM
  cell
  INNER JOIN region
    ON cell.region_id = region.id

, вы получите все ячейки ивключите идентификатор района в вывод

0 голосов
/ 17 декабря 2018

ПОПРОБУЙТЕ:

create trigger set_district_id
after insert
on cell_table
referencing new as NEW
ON EACH ROW
BEGIN
 a number;
 select district_id into a from region_table where 
 id=:NEW.region_id;
 update cell_table set district_id=a where region_id=:NEW.region_id;
END;
/
...