我有一个包含两个表的数据库。当用户发布文章时,它将被插入到两个表中(在一个文件中有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 :(得分:3)
首先,你不能在两个表上都有自动增量。
通常,您在insert
中执行table 1
,获取刚刚插入的行的ID
。
然后,您使用此ID
,insert
table 2
引用table 1
。
请参阅
中的 mysqli :: $ insert_idhttp://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);
答案 1 :(得分: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');
答案 2 :(得分:0)
为什么不将table1用作用户表,第二用于帖子?
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