2013-08-06 3 views
0

У меня есть следующие инструкции вставки:Три вставки заявления в три таблицы

$sql ="INSERT INTO `firm`(name, VAT, active) VALUES ('$name', '$VAT', '$active')"; 

$sql = "INSERT INTO `area`(name, hub_name, fk_hub_id) VALUES ('$areaname',(SELECT `name` from hub WHERE name = '$hub_name'), (SELECT `id` from hub WHERE name = '$hub_name'))"; 

$sql ="INSERT INTO 'contactdetails' 
     (fk_firm_id, 
     address_physical_line_1, 
     address_physical_line_2, 
     address_physical_line_3, 
     address_physical_line_4, 
     address_physical_line_5, 
     address_physical_line_6, 
     address_physical_line_7, 
     address_physical_code, 
     address_postal_line_1, 
     address_postal_line_2, 
     address_postal_line_3, 
     address_postal_line_4, 
     address_postal_line_5, 
     address_postal_line_6, 
     address_postal_line_7, 
     address_postal_code, 
     fax_1, 
     fax_2, 
     phone_1, 
     phone_2, 
     phone_3, 
     phone_4) 
VALUES  ((SELECT `id` 
      FROM firm 
      WHERE name = '$name'), 
      '$address_physical_line_1', 
      '$address_physical_line_2', 
      '$address_physical_line_3', 
      '$address_physical_line_4', 
      '$address_physical_line_5', 
      '$address_physical_line_6', 
      '$address_physical_line_7', 
      '$address_physical_code', 
      '$address_postal_line_1', 
      '$address_postal_line_2', 
      '$address_postal_line_3', 
      '$address_postal_line_4', 
      '$address_postal_line_5', 
      '$address_postal_line_6', 
      '$address_postal_line_7', 
      '$address_postal_code', 
      '$fax_1', 
      '$fax_2', 
      '$phone_1', 
      '$phone_2', 
      '$phone_3', 
      '$phone_4') "; 

Должен ли я использовать транзакционный заявление для запуска этих трех запросов. Я никогда не работал с транзакционными заявлениями. Одно утверждение зависит от значений других.

+0

Почему у вас есть каждая строка адреса в отдельной колонке? Разве вы не можете просто поставить какой-нибудь разделитель там, newline, | или что-то? – MightyPork

+0

использовать многопользовательский запрос из mysql для выполнения всего сразу. его очередное выполнение. – Priya

ответ

0

MySQL имеет значение AUTO_COMMIT, установленное по умолчанию. Это означает, что каждый запрос в вашем скрипте будет выполнен до первого.

Это позволяет сделать что-то вроде:

// Here I admit that the table is empty, with an auto-incremented id. 
INSERT INTO test VALUES ('', 'First'); 
INSERT INTO test ('', SELECT value FROM test WHERE id = "1"); 

Здесь вы вставляете первый ряд с id=1, value="First", а затем id=2, value="First".

0

Я не уверен, что действительно понимаю ваш вопрос, но если вам необходимо выполнить несколько запросов SQL гарантирующий они либо все сделано или никто не сделано, вы должны явно создать и совершить сделку:

START TRANSACTION 
INSERT ... 
INSERT ... 
INSERT ... 

-- All is ready, apply "all at once" 
COMMIT 

http://dev.mysql.com/doc/refman/5.0/en/commit.html


Просто чтобы быть ясно (?), от внутри вашей транзакции все операторы SQL выглядят исполняемыми «один за другим, как обычно». Но от за пределами мир (другие транзакции/подключения к вам SQL-сервер) никаких изменений не появятся до тех пор, пока вы не сделаете COMMIT ваши транзакции, а затем все изменения появятся «все сразу».

Смежные вопросы