【问题标题】:Reading auto increment column during INSERT INTO query在 INSERT INTO 查询期间读取自动增量列
【发布时间】:2023-04-06 00:32:02
【问题描述】:

我想知道是否可以读取设置为将要插入的行的自动递增的列的值?我计划将行的order_id 列(自动递增主键)编码为transaction_id,这将是一个公开可见的ID。

因此,客户端不会搜索 http://website.com/order.php?order_id=3,而是会读取类似 http://website.com/order.php?transaction_id=188117104 的内容。

以下是我将如何将order_id 散列到可公开查看的transaction_id

base_convert(  hash( "adler32", $string ), 36, 10 )

有没有一种方法可以获得order_id 列,以便在执行查询以将记录插入数据库之前将其修改为transaction_id 列?

谢谢。

编辑 1:

使用 mysql_last_id 是否可以在单个查询中执行此操作?

<?php

// Insert records for product_orders
mysql_query('
    INSERT INTO ' . DB_PFIX . 'product_orders (
        order_transaction_id
    ) VALUES (
        "' . base_convert(  hash( "adler32", "LAST_INSERT_ID" + 1 ), 36, 10 ) . '"
    ), (
        "' . base_convert(  hash( "adler32", "LAST_INSERT_ID" + 1 ), 36, 10 ) . '"
    ), (
        "' . base_convert(  hash( "adler32", "LAST_INSERT_ID" + 1 ), 36, 10 ) . '"
    ), (
        "' . base_convert(  hash( "adler32", "LAST_INSERT_ID" + 1 ), 36, 10 ) . '"
    ), (
        "' . base_convert(  hash( "adler32", "LAST_INSERT_ID" + 1 ), 36, 10 ) . '"
    )
') or die (
    mysql_error()
);

?>

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    MySQL 不支持序列,因此获取 NEXTVAL 并不容易。尝试这样做是一个非常糟糕的主意,因为让多个用户创建插入可能会导致返回错误的 ID。一个更好的主意是进行两阶段提交(或者甚至将 last_insert_id 返回给 PHP,然后执行另一个查询)我会使用 mysql_insert_id 进行两阶段事务。然后执行您的逻辑并更新该行。

    【讨论】:

    • 是否可以在上面的 EDIT 1 中做类似的事情?
    猜你喜欢
    • 2011-10-19
    • 2016-10-08
    • 2010-12-31
    • 2011-12-09
    • 2016-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-10
    相关资源
    最近更新 更多