在插入/重复值到另一个时获取ID

时间:2013-09-19 14:14:00

标签: php mysql

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

IDUser_ID我希望它们始终是相同的值

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

等等

4 个答案:

答案 0 :(得分:2)

我发现你的需求非常值得怀疑,并且有一种设计气味。不过,您有机会实现您的目标。关键是触发器

您可以在这里找到 TRIGGER SYNTAX

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

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

我不会发表一个例子,因为手册非常有说服力,无论如何都是一本很好的阅读。

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

答案 1 :(得分:0)

在致电mysql_insert_id()

后使用mysql_query

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

此处更多信息http://uk1.php.net/mysql_insert_id请注意,所有mysql_函数现已弃用,因此我建议使用mysqli_或PDO。

答案 2 :(得分:0)

if(mysql_query("INSERT INTO `users` (`name`) VALUES ('name')")){
  $id = (int)mysql_insert_id();
  mysql_query("UPDATE `users` SET `User_ID` = {$id}");
}

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

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