2

MySQL テーブルの最初の列には、自動インクリメント ID が含まれています。新しい行をテーブルに挿入するときに、この値を別の列に入力したいと思います。つまり、ID 列の値を読み取って、次の列に挿入する必要があります。

これを行うことは可能ですか?

4

5 に答える 5

3

これは機能するはずです:

INSERT INTO table(id, same_id, col1)
(
 SELECT NULL AS id,
        (SELECT AUTO_INCREMENT
         FROM information_schema.TABLES
         WHERE TABLE_SCHEMA=DATABASE() AND
               TABLE_NAME='table') AS same_id,
        "value" AS col1
);

編集:それが指摘するJonathan Swartzように、競合状態に苦しんでいます。これを修正するLAST_INSERT_ID()には、最後に挿入されたIDを取得し、新しい列でこの値を更新します。

INSERT INTO table(id, same_id, col1)
(
 SELECT NULL AS id,
        NULL AS same_id,
        "value" AS col1
);

SELECT LAST_INSERT_ID() INTO @var_id;

UPDATE  table
SET     same_id = @var_id
WHERE   id = @var_id;
于 2012-08-14T10:13:23.390 に答える
2

単純なトリガーで仕事をすることができます。

行がテーブル1に挿入されるときに呼び出されます

それからIDを取得し、テーブル2にファイルを挿入します

マニュアルを確認

于 2012-08-14T10:04:03.067 に答える
2

上記の回答のいくつかはうまくいくと確信していますが、それらを実装する方法を見つけることができませんでした。ただし、を使用してソリューションを正常に実装しました$pdo->lastInsertId()。つまり、追加した INSERT クエリを実行した後:

$new_id = $pdo->lastInsertId();

$sth2 = $pdo->prepare("UPDATE `tracks` SET `fav_id`= IF(`fav_id`=0,$new_id,fav_id) WHERE `id`=$new_id");
$sth2->execute();

fav_id がまだ設定されていない場合は、最後に挿入された行の fav_id 列が、この行の id 列と同じ値に設定されます。

于 2012-08-16T19:46:59.277 に答える
0

キーの有無にかかわらず、2 番目の列も (一致する AUTOINCREMENT 初期値で) 自動インクリメントすることができます。

于 2012-08-14T10:06:28.057 に答える
0

この上で使用するmysqli_insert_id場合は使用できますPHP

例。

<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$mysqli->query("CREATE TABLE myCity LIKE City");

$query = "INSERT INTO myCity VALUES (NULL, 'Stuttgart', 'DEU', 'Stuttgart', 617000)";
$mysqli->query($query);

printf ("New Record has id %d.\n", $mysqli->insert_id);

/* drop table */
$mysqli->query("DROP TABLE myCity");

/* close connection */
$mysqli->close();
?>

このmysqli_insert_id()関数は、AUTO_INCREMENT 属性を持つ列を持つテーブルに対するクエリによって生成された ID を返します。最後のクエリが INSERT または UPDATE ステートメントではない場合、または変更されたテーブルに AUTO_INCREMENT 属性を持つ列がない場合、この関数はゼロを返します。

于 2012-08-14T10:02:55.597 に答える