Обновление MySQL для других таблиц - PullRequest
0 голосов
/ 18 ноября 2011

Я хочу иметь возможность вставлять данные в t1 и получать данные в таблицу t2 с первичным ключом в качестве внешнего ключа в t2.

В принципе, как получается, что в моей текущей настройке я INSERT INTO t1 (first_name, last_name) values ( "blah", "blah");, а затем SELECT * FROM t2; t2 говорит: Empty Set (0.00 sec) для t2? Не должно ли оно хотя бы показать значение по умолчанию id из 1?

t1:

+------------+------------------+------+-----+---------+----------------+
| Field      | Type             | Null | Key | Default | Extra          |
+------------+------------------+------+-----+---------+----------------+
| first_name | varchar(20)      | NO   |     | NULL    |                |
| last_name  | varchar(20)      | NO   |     | NULL    |                |
| id         | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
+------------+------------------+------+-----+---------+----------------+

t2

+-----------+------------------+------+-----+---------+-------+
| Field     | Type             | Null | Key | Default | Extra |
+-----------+------------------+------+-----+---------+-------+
| address   | varchar(50)      | NO   |     | NULL    |       |
| id        | int(10) unsigned | NO   | MUL | NULL    |       |
| last_name | varchar(20)      | YES  |     | NULL    |       |
+-----------+------------------+------+-----+---------+-------+

Ответы [ 3 ]

1 голос
/ 18 ноября 2011

В реляционной базе данных FOREIGN KEY - это объявление о том, что вы намереваетесь вставить значения в T2, которые должны соответствовать уже существующему значению в T1, и что вы хотите, чтобы база данных отказывалась выполнить любое действие, которое нарушило бы это отношение.

Это не означает, что база данных будет создавать записи самостоятельно, чтобы удовлетворить отношения.Если вы попытаетесь вставить значение в T2, которое не существует в T1, команда потерпит неудачу;он не добавит необходимую запись в T1.

Это противоположно тому, что вы предлагаете, в котором вы хотите, чтобы значения внешнего ключа генерировались автоматически.Однако не требуется, чтобы значение первичного ключа на самом деле имело ссылки , и, кроме того, не существует ограничения на количество обращений к значению первичного ключа - так как же база данных будет угадывать, что должно быть создано в T2?

Тем не менее, если вы хотите, чтобы часть вашего собственного кода выполнялась автоматически при добавлении данных в T1, код, который может делать все, что вы хотите, вы можете создать триггер на T1.

1 голос
/ 18 ноября 2011

Нет, таблицы не будут распространяться автоматически. (Однако вы можете сделать это с помощью триггеров). Вам нужно будет вставить в t2.

0 голосов
/ 18 ноября 2011

Вы можете создать триггер для таблицы t1, чтобы он вставлял строку в t2 с правильным идентификатором и другими полями NULL

Внешние ключи не будут вставлять записи для вас.

DELIMITER ;;
CREATE TRIGGER insert_addr_rec BEFORE INSERT ON t1
FOR EACH ROW BEGIN
   INSERT INTO t2 SET id=NEW.id, last_name=NEW.last_name
END ;;
DELIMITER ;

NB непроверенный код

...