Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / INSERT в разные таблицы / 15 сообщений из 15, страница 1 из 1
17.04.2014, 21:45:26
    #38618097
alex021
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT в разные таблицы
Добрый вечер, есть две таблицы.

Employye
id_e(PK)name_esurname_e1JillBlack2FredGreen

Developer
id_d(PK)speciality_d1Java2C++

Где в первой и второй таблице, id_e и id_d это PK для таблиц и один и тот же айдишник для работника одновременно, при этом айдишники уникальыне, генеряться базой данных.
просто вторая таблица "девелопер" расширяет..не знаю..наследует что ли=) (если в sql есть такое понятие) таблицу Employee.
можно ли составить один запрос, который одновременно вносит данные в две таблицы? И,главное, как это сделать)
т.к мои запросы со всяческими комбинациями JOIN'ов выглядели довольно странно и не работали.
или это можно сделать только добавив сначала данные в Employee а потом вытащив id_e забить данные в Developer?

Заранее огромное спасибо!
...
Рейтинг: 0 / 0
17.04.2014, 22:38:34
    #38618134
chabapok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT в разные таблицы
alex021,

Если я правильно понял что вы хотите.

Одним запросом нельзя. Для таких вещей есть транзакции.

В рамках одной транзакции: вставить в одну таблицу, воспользовавшись LAST_INSERT_ID() получить сгенеренный айдишник и использовать его для вставки в другую таблицу.
...
Рейтинг: 0 / 0
17.04.2014, 23:33:26
    #38618164
alex021
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT в разные таблицы
chabapok,

спасибо, да думаю правильно поняли..я и сам в сторону транзакции смотреть начал..только беда с этим
...
Рейтинг: 0 / 0
18.04.2014, 01:39:14
    #38618197
alex021
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT в разные таблицы
еще раз спасибо зп подсказку хоршая вещь)
попробовал сделать транзакцию
вот что получилось) но одновременно не получилось
Код: plsql
1.
2.
3.
4.
5.
6.
7.
BEGIN TRANSACTION                          //1строка
INSERT INTO Employee (name_e, surname_e)
 VALUES ('Patrick','Brown');
SET @lastID := LAST_INSERT_ID();
 INSERT INTO Developer(id_dr,speciality_d)
VALUES (@lastID,'SQL');
 COMMIT TRANSACTION                      //2 строка



эта комманда у меня не работает!
выкидывает ошибку, что то типо:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
INSERT INTO Employee (id_ at, line 1
Строка 2, столбец 1

Успешно исполнено за 0,002 сек, количество затронутых строк: 0.
Строка 7, столбец 1

Код ошибки 1062, положение SQL 23000: Duplicate entry '30' for key 'PRIMARY'
Строка 8, столбец 2

Код ошибки 1064, положение SQL 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'TRANSACTION' at line 1
Строка 12, столбец 2


Но! если закомментить 1 и 2 строку, то есть BEGIN TRANSACTION и COMMIT TRANSACTION ,
то все прекрасно заполняется!

что это такое? и почему так происходит? как исправить?
почему без транзакции все хорошо работает?
...
Рейтинг: 0 / 0
18.04.2014, 06:40:34
    #38618234
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT в разные таблицы
как это
INSERT INTO Developer(id_dr,speciality_d)
VALUES (@lastID,'SQL');

сочетается с этим
Где в первой и второй таблице, id_e и id_d это PK для таблиц и один и тот же айдишник для работника одновременно, при этом айдишники уникальыне, генеряться базой данных .
...
Рейтинг: 0 / 0
18.04.2014, 10:09:53
    #38618375
alex021
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT в разные таблицы
вадя,

извиняюсь за неточность. генерируются только в таблице Employee.
В таблице Devrloper - это протосто PK.
...
Рейтинг: 0 / 0
18.04.2014, 11:32:50
    #38618490
alex021
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT в разные таблицы
в табл Developer id_d просто привязан к id_e из таблицы Employee
...
Рейтинг: 0 / 0
18.04.2014, 11:32:59
    #38618491
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT в разные таблицы
...
Рейтинг: 0 / 0
18.04.2014, 12:29:45
    #38618611
chabapok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT в разные таблицы
alex021,

ну написано же все.
Duplicate entry означает, что в таблице уже есть строка с числом 30 в этой колонке
почему она там есть - это уже вопрос к вам. Когда-то кто-то вставил.

syntax error по той причине, что во фразе "COMMIT TRANSACTION" второе слово лишнее. Просто commit.
...
Рейтинг: 0 / 0
18.04.2014, 13:50:21
    #38618751
alex021
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT в разные таблицы
эмм..да там ошибки не умные) вроде теперь "взлетело"
доку я так понял мне скидывали чтобы над синтаксисом поработал, спасибо!

еще в доке я нашле вот такую комманду
Код: sql
1.
LOCK TABLES/UNLOCK TABLES



может быть ее тоже надо испольщовать? теоретически во время моего добавления любой дркгой поток может вклиниться и получится каша.. или сам факт того что у меня
Код: sql
1.
2.
3.
START TRANSACTION 
и до момента
COMMIT


таблицы заблокированны? или я опять глупый вопрос задаю)
...
Рейтинг: 0 / 0
18.04.2014, 14:04:21
    #38618774
chabapok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT в разные таблицы
alex021,

если у вас таблицы формата Aria или MyISAM, то они транзакции вообще не поддерживают, и поэтому их надо лочить.
если InnoDb и совместимые, то использовать транзакции.

там еще есть такая штука уровни изоляции транзакций, но тут в двух словах не обьяснишь - это уже гуглите и читайте самостоятельно. Но по идее по умолчанию там нормально настроено.
...
Рейтинг: 0 / 0
18.04.2014, 14:13:18
    #38618792
alex021
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT в разные таблицы
chabapok,

честно говоря без понятия какие у меня таблицы )
...
Рейтинг: 0 / 0
18.04.2014, 14:14:43
    #38618797
alex021
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT в разные таблицы
стоит workbench 6.0 CE.
в любом случае, огромное спасибо за советы) буду разбираться
...
Рейтинг: 0 / 0
18.04.2014, 14:35:13
    #38618835
chabapok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT в разные таблицы
alex021,

show create table имя_таблицы;
...
Рейтинг: 0 / 0
18.04.2014, 14:48:26
    #38618857
alex021
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT в разные таблицы
chabapok,

спасибо! InnoDB - значит все отлично)
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / INSERT в разные таблицы / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]