2013-06-03 2 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

В таблице может быть только одно поле с приращением. используйте Joins вместо –

ответ

2

Во-первых, вы не можете иметь автоматическое приращение на обеих таблицах.

Обычно, вы делаете 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); 
+0

, поэтому мне нужно использовать последний идентификатор вставки и запрос после – 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

Почему бы не использовать 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