SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 07.12.2011 11:49:37

Dezmont
Участник
Зарегистрирован: 01.12.2011
Сообщений: 4

Foreign Key и то что с ними связано

Добрый день, подскажите пожалуйста.
Предположим создаю я 2 таблицы:


CREATE TABLE `person` (`id` INT(11) NOT NULL AUTO_INCREMENT, `name` VARCHAR(255),
`age` VARCHAR(255), PRIMARY KEY  (`id`));
CREATE TABLE `driver` (`id` INT(11) NOT NULL AUTO_INCREMENT,`id_person` INT(11) NOT NULL,
 PRIMARY KEY  (`id`), FOREIGN KEY (`id_person`) REFERENCES `person` (`id`));
 

В person указываются имена (Василий, Пётр, Владимир...), а в driver в ячейке id_person стоят эти элементы, которые могут повторяться. Как я понял, тут нужен FOREIGN KEY.
Сделал в общем так как в листинге.
Вопрос в следующем. У меня есть форма, куда должно вводится имя drivera. Как мне сделать, чтобы при вводе в поле формы name, выбиралось соответствующее id из person и записывалось в id_person таблицы driver? Или же для этого уже нужны средства стороннего языка?

P.S. И объясните пожалуйста, что вообще даёт этот FOREIGN KEY? Потому что создав таблицу, я так и не понял. При добавлении в id_person значений, которых нет в столбце id таблицы person, MySQL не выдаёт никаких ошибок, а спокойно добавляет несуществующее значение.
Какой прок от этого внешнего ключа?

Отредактированно Dezmont (07.12.2011 12:05:06)

Неактивен

 

#2 08.12.2011 00:39:43

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Foreign Key и то что с ними связано

А какой у Вас тип таблиц? У myisam вторичные ключи не работают, нужен тип innodb.

Или же для этого уже нужны средства стороннего языка?

Да.

foreign key - он следит, чтобы в id_person обязательно было значение из person.id. Исключительно полезная вещь, чтобы потом артефакты в базе не вылавливать и не ломать голову, почему такой-то драйвер принадележит несуществующей персоне smile.

Отредактированно deadka (08.12.2011 00:40:11)


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson