我有一個數據庫與兩個表。當用戶發佈文章時,它將被插入到兩個表格中(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
我有一個數據庫與兩個表。當用戶發佈文章時,它將被插入到兩個表格中(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
首先你不能有兩個表自動遞增。
通常情況下,你所做的是insert
在table 1
,得到插入的行的ID
。
然後你使用這個ID
,insert
在table 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);
,所以我必須使用最後一個插入ID和 – user2178521
之後的查詢正好......並且在第二個表上沒有自動增量。 –
更好的是,您還可以使用此處描述的存儲過程來滿足您的需求:http://stackoverflow.com/a/1723325/1688441 –
你也可以做到這一點使用基於存儲過程: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');
爲什麼不使用表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
表中只能有1個自動增量字段。使用連接代替 –