Mysql вставить в 2 таблицы - PullRequest
10 голосов
/ 16 июня 2010

Я хочу сделать вставку в 2 таблицы

посещения:

visit_id int | card_id int

регистрация:

registration_id int | type enum('in','out') | timestamp int | visit_id  int

Я хочу что-то вроде:

INSERT INTO `visits` as v ,`registration` as v
(v.`visit_id`,v.`card_id`,r.`registration_id`, r.`type`, r.`timestamp`, r.`visit_id`) 
VALUES (NULL, 12131141,NULL, UNIX_TIMESTAMP(), v.`visit_id`);

Интересно, возможно ли это

Ответы [ 4 ]

11 голосов
/ 16 июня 2010

Это невозможно с одним запросом, так как INSERT может вставить данные только в одну таблицу в MySQL.Вы можете

  1. записать это как два запроса и выполнить их как пакет
  2. создать хранимую процедуру, которая будет выполнять две команды вставки

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

8 голосов
/ 16 июня 2010

Кажется, что проблема, которую вы пытаетесь решить, состоит в том, чтобы получить значение автоинкремента из строки «посещения» для вставки в «регистрацию». Я прав?

Если это так, вы можете просто использовать функцию LAST_INSERT_ID () следующим образом:

INSERT INTO `visits` (`visit_id`,`card_id`) 
VALUES (NULL, 12131141);
INSERT INTO `registration` (`registration_id`, `type`, `timestamp`, `visit_id`) 
VALUES (NULL, 'in', UNIX_TIMESTAMP(), LAST_INSERT_ID());
0 голосов
/ 01 ноября 2015

Вы всегда можете сделать что-то подобное

INSERT IGNORE INTO `table2` VALUES ((select id from table1 where col="value"), 3, 4, 5)
0 голосов
/ 03 марта 2012
INSERT INTO designation as de,
                department as da,
                    profile as pr

                                  (designation_name,
                                   depart_id,
                                   id,
                                   username,
                                   department,
                                   designation)


      select de.designation_name,
             de.depart_id,da.id,
             pr.username,
             pr.department,
             pr.designation 
       from 
              designation,
              department,
              profile

          de.designation_name='project manager' AND de.id='1'         OR
          de.depart_id='2' AND de.id='2'                              OR  
          da.id='2'                                                   OR  
          pr.username='kapil.purohit' AND pr.id='9' AND pr.status='1' OR 
          pr.department='1' AND pr.id='9'                             OR  
          pr.designation='3' AND pr.id='9' AND pr.status='1'

       WHERE               
               de.id    =   da.id   AND
                   da.id    =   pr.id   AND
                   de.id    =   pr.id   AND
                                    ORDER BY de.id DESC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...