在插入MySQL表时如何将自动增量ID列的值插入另一列?

时间:2012-08-14 10:00:00

标签: mysql insert auto-increment

我的MySQL表中的第一列包含一个自动增量ID。我想在表中插入新行时将此值输入另一列,即我需要读取ID列中的值并将其插入下一列。

是否可以这样做,如果可以,怎么做?

5 个答案:

答案 0 :(得分: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;

答案 1 :(得分:2)

一个简单的触发器可以完成这项工作。

在表1中插入行时将调用它

并将从中获取Id并将文件插入表2

check manual

答案 2 :(得分: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列相同的值。

答案 3 :(得分: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()函数返回查询生成的ID,该查询在具有AUTO_INCREMENT属性的列的表上。如果最后一个查询不是INSERT或UPDATE语句,或者如果修改后的表没有具有AUTO_INCREMENT属性的列,则此函数将返回零。

答案 4 :(得分:0)

您可以使用或不使用任何键,使第二列自动增量最高(具有匹配的AUTO INCREMENT初始值)。