MySQL - Как добавить запись в таблицу, имеющую внешний ключ

Ответить
Аватара пользователя
andrystepa

MySQL - Как добавить запись в таблицу, имеющую внешний ключ

Сообщение andrystepa »

База MySQL. Есть таблица отделов Units со столбцами: Unit_Id, Unit_Name. Unit_Id - Primary key. Далее есть таблица сотрудников Users со столбцами User_Id, User_name, Unit_Id. User_Id - Primary key а Unit_Id естественно внешний ключ. Таблица отделось Units заполнена, а таблицу сотрудников надо будет заполнять (или добавлять/удалять) начальникам отделов. Начальник отдела знает только название своего отдела а идентификатор, естественно не знает. Как составить запрос на вставку (или удаление) сотрудника, чтобы идентификатор отдела был взят из таблицы отделов по его названию?

И, кроме того, как все это сделать с помощью пакетной вставки - сотрудников много.

Более точное описание таблиц такое:

Units



Код:

Код: Выделить всё

 
mysql> DESCRIBE Units;
+-----------+----------------------+------+-----+---------+----------------+
| Field     | Type                 | Null | Key | Default | Extra          |
+-----------+----------------------+------+-----+---------+----------------+
| Unit_Id   | smallint(5) unsigned | NO   | PRI | NULL    | auto_increment |
| unit_name | varchar(30)          | YES  | UNI | NULL    |                |
+-----------+----------------------+------+-----+---------+----------------+

А таблица Users:





Код:

Код: Выделить всё

 
mysql> DESCRIBE Users;
+-----------+----------------------+------+-----+---------+----------------+
| Field     | Type                 | Null | Key | Default | Extra          |
+-----------+----------------------+------+-----+---------+----------------+
| User_Id   | smallint(5) unsigned | NO   | PRI | NULL    | auto_increment |
| User_name | varchar(31)          | NO   | UNI |         |                |
| Unit_Id   | smallint(5) unsigned | YES  | MUL | NULL    |                |
+-----------+----------------------+------+-----+---------+----------------+

Пробовал такой метод вставки:



Код:

Код: Выделить всё

Imysql> INSERT INTO Users(User_name) VALUES( 'Иванов И.' );
Query OK, 1 row affected (0.00 sec)
mysql> UPDATE Users SET Unit_id = (SELECT Unit_id FROM Units WHERE unit_name = 'Отдел Систем Управления')  WHERE Unit_Id = 0;
Query OK, 0 rows affected (0.00 sec)

Первый запрос прошел без проблем, а вот второй не удался. Даже если вместо вложенного запроса вставить реальную цифру из таблицы Units, все равно ответ тот же.

Как все-таки вставить эти записи? Хотя бы без пакетной вставки!
Аватара пользователя
Delirium

Re: MySQL - Как добавить запись в таблицу, имеющую внешний ключ

Сообщение Delirium »

Цитата andrystepa:



Первый запрос прошел без проблем, а вот второй не удался
MySQL - Как добавить запись в таблицу, имеющую внешний ключ




Ну правильно. В первом случае вы вставляете записи, во втором обновляете существующие.



Что можно сделать:



Код:

Код: Выделить всё

insert into USERS(user_name, unit_id) (select 'Иванов И.', unit_id from Units where unit_name='Отдел Систем Управления')
Аватара пользователя
andrystepa

Re: MySQL - Как добавить запись в таблицу, имеющую внешний ключ

Сообщение andrystepa »

Спасибо, разобрался. В моем втором запросе вместо WHERE Unit_Id = 0 надо было ставить WHERE Unit_Id IS NULL; так как NULL и 0 не одно и то же. Впрочем Delirium, - Ваш вариант получше будет - все-таки один запрос.
Ответить

Вернуться в «Программирование и базы данных»