2013-06-03 91 views
0

我有一個數據庫與兩個表。當用戶發佈文章時,它將被插入到兩個表格中(2個查詢在一個文件中)插入2表並設置兩個外鍵自動增量

我使用post_id作爲foreign key,兩個表格post_id自動遞增。外鍵會搞砸嗎?例如,如果用戶A和B同時查詢數據庫。

表1

post_id user... 
1  A 
2  B 

表2

post_id content... 
1  A 
2  B 
+0

表中只能有1個自動增量字段。使用連接代替 –

回答

2

首先你不能有兩個表自動遞增。

通常情況下,你所做的是inserttable 1,得到插入的行的ID

然後你使用這個ID,inserttable 2其中引用table 1

參見:的mysqli :: $ INSERT_ID

http://www.php.net/manual/en/mysqli.insert-id.php

例子:

$query = "INSERT INTO table1(user,whatever) VALUES ('A','something')"; 
$mysqli->query($query); 

printf ("New Record has id %d.\n", $mysqli->insert_id); 

$query = "INSERT INTO table2(post_id,content) VALUES ($mysqli->insert_id,'This is content')"; 
$mysqli->query($query); 
+0

,所以我必須使用最後一個插入ID和 – user2178521

+0

之後的查詢正好......並且在第二個表上沒有自動增量。 –

+0

更好的是,您還可以使用此處描述的存儲過程來滿足您的需求:http://stackoverflow.com/a/1723325/1688441 –

0

你也可以做到這一點使用基於存儲過程:stackoverflow.com/ a/1723325/1688441

DELIMITER // 
CREATE PROCEDURE new_post_with_content(
    user_id CHAR(5), content_text CHAR(100) 
BEGIN 
START TRANSACTION; 
    INSERT INTO table1 (user) 
    VALUES(user_id); 

    INSERT INTO table2 (post_id, content) 
    VALUES(LAST_INSERT_ID(), content_text); 
COMMIT; 
END// 

DELIMITER ; 

而且你怎麼稱呼它,像這樣:

CALL new_engineer_with_task('A','This is the content'); 
0

爲什麼不使用表1爲用戶表和第二位的職位?

users 
user_id(autoinc) username 
1     A 
2     B 
3     C 

posts 
post_id(autoinc) user_id  posts_text 
1     2    text 
2     1    other text