【问题标题】:MySQL trigger + insertMySQL触发器+插入
【发布时间】:2025-12-19 13:30:07
【问题描述】:

我正在尝试从一个表 pk 获取我当前的 id 以插入另一个表 fk,我的下一个尝试是在数据库中设置一个触发器。

    CREATE PROCEDURE `INSERIR CODIGO DISPENSACAO` ()
    CREATE TRIGGER `productInsert`
        BEFORE INSERT ON `produtos_disp`
        FOR EACH ROW
    BEGIN
    set NEW.ID_PRODISP = (select max(ID)
                        from dispensacao p            
                       );
    END

我想从 dispensacao 表中设置 max id

【问题讨论】:

  • 这不会真正起作用,因为多个连接可能会增加 id 并且您将拥有错误的 id。您应该运行第一个,获取 last_inserted_id,然后在 c# 中运行下一个
  • 使用LAST_INSERT_ID()。你也不想要AFTER INSERT吗?
  • 这里是 last_insert_id *.com/a/15057619/5193536的示例
  • 不是最后插入的 id 只能用于相同的连接
  • 你能向我解释一下它将如何从该示例中甚至没有提到的表中获取最后插入的 id,它如何知道要使用的 id

标签: c# mysql


【解决方案1】:

设法使用组合框作为降序获取最大 ID。 用过

 MySqlConnection connection = new MySqlConnection("connectionString");

        string selectQuery = "select ID from dispensacao ORDER BY id DESC LIMIT 1";
        connection.Open();
        MySqlCommand command = new MySqlCommand(selectQuery, connection);
        MySqlDataReader reader = command.ExecuteReader();
        DataTable dt2 = new DataTable();
        dt2.Load(reader);           
        Cmbid.DisplayMember = "ID";            
       Cmbid.DataSource = dt2;

这会从表中返回最大 id,您需要做的就是使其不可见,这样用户就不会更改,因为它是一个组合框

【讨论】: