0

是否可以获得 MySQL DB 中条目的 ID?或者甚至更好地将 ID 的值复制到另一个字段中?例如我有:

ID而且User_ID我希望它们始终具有相同的价值

--------------------
|  ID   User_ID    |
|  1       1       |
|  2       2       |
|  3       3       |
|  4       4       |
|  5       5       |
--------------------

等等

4

4 回答 4

2

我发现你的需求很可疑,而且有设计的味道。然而,您有机会实现您正在寻找的东西。关键是触发器

在这里你可以找到触发语法

基本上你需要定义一个合适的AFTER INSERT触发器。

插入未设置 user_id 字段的行,读取触发器内的自动增量 id 并根据需要设置 user_id 值。

我不会发布示例,因为该手册非常详尽,而且无论如何它都是一本好书。

为什么我认为你的想法很糟糕?好吧,您正在复制数据(根据您的定义,“您希望它们始终相同”)而没有获得价值。重复的列完全没用,可以删除。如果您将它们用作键或外键引用,则这两列是完全可以互换的。因此,只需放下其中一个并完成它。

于 2013-09-19T14:18:53.583 回答
0

mysql_insert_id()致电后使用mysql_query

或者mysqli_insert_id()正在使用 mysqli_ 而不仅仅是 mysql_

更多信息在这里http://uk1.php.net/mysql_insert_id请注意,所有mysql_功能现在都已贬值,所以我建议改用 mysqli_ 或 PDO。

于 2013-09-19T14:15:20.597 回答
0
if(mysql_query("INSERT INTO `users` (`name`) VALUES ('name')")){
  $id = (int)mysql_insert_id();
  mysql_query("UPDATE `users` SET `User_ID` = {$id}");
}

但这从一开始就不是好主意:)

于 2013-09-19T14:19:17.663 回答
0

如果您使用自动增量,那么您想要的是里面:

SELECT AUTO_INCREMENT FROM information_schema.tables
WHERE table_name = 'myTable' AND table_schema = DATABASE( )

所以在这种情况下使用例如:

INSERT INTO myTable (ID, User_ID) values ( NULL ,
    (
        SELECT AUTO_INCREMENT FROM information_schema.tables
        WHERE table_name = 'myTable' AND table_schema = DATABASE( )
    )
);

Null 表示自动增量 ID。并且子查询将产生要使用的自动增量 ID。

如果您不使用自动增量,那么您可以简单地执行以下操作:

INSERT INTO myTable (ID, User_ID) values ( 5 , ID );

...因此将 ID 引用到 User_ID

于 2013-09-19T14:28:01.520 回答