插入2表并设置外键自动增量

时间:2013-06-03 12:35:45

标签: php mysql

我有一个包含两个表的数据库。当用户发布文章时,它将被插入到两个表中(在一个文件中有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

3 个答案:

答案 0 :(得分:3)

首先,你不能在两个表上都有自动增量。

通常,您在insert中执行table 1,获取刚刚插入的行的ID

然后,您使用此IDinsert 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);

答案 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