【问题标题】:How to get the ID (auto increment) of a record about to be uploaded?如何获取即将上传的记录的ID(自增)?
【发布时间】:2013-12-06 04:03:16
【问题描述】:

我正在使用 Laravel 3。我有一个表格和 2 个表格。一个表有一个 AUTO INCREMENT ID,我想将此 ID 提供给第二个表。例如。

表1

ID:自动递增
标题:

文本:

日期:

表2

ID:自动递增 t1_ID: table1->ID

文字:

有可能吗? 我想我可以获取 table1 中最后一条记录的 ID 并在控制器中为其添加 1,但也许有更简单的方法。

【问题讨论】:

  • 请在此处发布您的代码
  • D 你想在插入表 A 之前或之后传递 ID?
  • 不要试图预测最后一个 ID+1,将记录插入到 table1 及其自动增量列中,获取用于该插入的最后一个 ID,然后将记录与检索到的一起添加到 table2自增值
  • @Stoleg 是的!我想在插入之前传递 ID,所以我也可以用一个按钮插入另一个表。

标签: php mysql laravel laravel-3


【解决方案1】:

解决方案 #1

听起来您需要使用触发器。为了安全起见,您应该使用 AFTER INSERT 触发器,因为您无法预测在 INSERT 期间发生某些意外错误时自动增量是否会增加一次以上。

也许触发器应该是这样的:

DELIMITER $$   
CREATE TRIGGER table1_ai AFTER INSERT ON table1 FOR EACH ROW   
BEGIN   
    INSERT INTO table2 (t1_ID) VALUES (NEW.ID);
END; $$
DELIMITER ;

这样,ID就安全地放在table2,知道ID在table1中实际使用。

解决方案 #2

您可以使用 information_schema 检索 ID。怎么样?

假设表是mydb.table1。您可以像这样快速获取下一个 auto_increment 值:

SELECT auto_increment FROM information_schema.tables
WHERE table_schema='mydb' and table_name='table1';

如果 mydb.table1 经历大量写入,这可能会有风险

结语

您应该使用SOLUTION #1,因为实现触发器将处理 ID 在两个表中的位置,而无需您对其进行编码。

【讨论】:

  • 更重要的是,触发器将保证在将行插入表 B 时自动增量值不会改变。
猜你喜欢
  • 2021-07-03
  • 2011-12-06
  • 2022-01-03
  • 1970-01-01
  • 2017-11-14
  • 2012-10-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多