6

私はSQLにまったく慣れていませんが、錆びていてMYSQL(PhPMyAdminを使用)に苦労しています...これを見てください:MySQLは複数のテーブル(リレーショナル) およびその他の関連トピックに挿入されますが、答えは見つかりませんでした。私は自分の例を単純化して、要点を理解しています。

2つのテーブルがある場合:

'table1' has: id (primary key, auto-increment), description (text)
'table2' has: id (primary key, auto-increment), title (text), description_id (int)

description_idの値を格納する単一のINSERTステートメントを作成するにはどうすればよいtable1.idですか?

2つのクエリを実行するphpの方法があることは知っていますが、すべてSQLで実行したいのですが、方法が必要ですか?テーブルを別の方法で設定する必要がありますか?私は外部キーについて何かを読みましたが、それが当てはまるかどうかわかりません。

ありがとう!

4

3 に答える 3

5

これを見つけた@hackattackに感謝しますか?すでに他の場所で答えました

BEGIN
INSERT INTO users (username, password) 
  VALUES('test', 'test')
INSERT INTO profiles (userid, bio, homepage) 
  VALUES(LAST_INSERT_ID(),'Hello world!', 'http://www.stackoverflow.com');
COMMIT;

しかし、ALAS-それはうまくいきませんでした。 MySQL 5リファレンスは、わずかに異なる構文を示しています。

INSERT INTO `table2` (`description`) 
  VALUES('sdfsdf');# 1 row affected.
INSERT INTO `table1`(`table1_id`,`title`) 
  VALUES(LAST_INSERT_ID(),'hello world');

そして、見よ、それはうまくいく!

今後のさらなる問題 クエリはphpMyAdminで成功しますが、私のPHPインストールはクエリについて文句を言い、構文エラーをスローします。私はこれをphp-wayで実行し、2つの別々のクエリを作成して使用することにしました。mysql_insert_id()

それは面倒だと思いますが、それはトランザクションよりもサーバーの負荷がはるかに少ないとは思いません。

于 2012-07-19T20:30:19.010 に答える
1

挿入ステートメントを使用して、複数のテーブルに挿入することはできません(書き込み可能なビューは別として*、ただしAFAIK MySQLはそれらをサポートしていません)。

あなたにとって興味深いのは、ステートメントを1つの「アトミック」アクションに「グループ化」できるトランザクションです。

*実際には、これは更新のみを許可し、挿入は許可しません(私は信じていますが、今はそれを疑うようになっています...とにかく、ここでは問題ではありません)

于 2012-07-19T20:24:36.110 に答える
-1

ここでトリガーを使用して、table2が挿入操作を取得するたびに、トリガーが実行されてtable1に挿入が行われるようにする必要があります。

于 2012-07-19T20:25:51.660 に答える