2013-08-06 104 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

爲什麼地球上的每條地址線都在單獨的列中?你不能只是把一些分隔符,換行符,|或者其他的東西? – MightyPork

+0

使用來自mysql的多重查詢一次全部執行。它的排隊執行。 – Priya

回答

0

默認情況下,MySQL將AUTO_COMMIT設置爲true。這意味着腳本中的每個查詢都會在之後的一個查詢之前執行。

這允許你做這樣的事情:

// 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你的交易 - 然後所有變化將出現「一次全部」。