检索InnoDB组合密钥表的最后插入ID

时间:2016-06-23 19:22:12

标签: php mysql pdo auto-increment

我有下表:

CREATE  TABLE `my_table` (
  composite_pk1 INT NOT NULL ,
  composite_pk2 INT NOT NULL ,
  data VARCHAR(255) NOT NULL ,
   primary key (composite_pk1, composite_pk2)
) ENGINE=InnoDB;

对于给定的composite_pk1,我希望composite_pk2充当自动增量主键。我不想锁定表格,因此计划使用如下的触发器:

DELIMITER $$

CREATE TRIGGER my_trigger BEFORE INSERT ON my_table
FOR EACH ROW BEGIN
    SET NEW.composite_pk2 = (
       SELECT IFNULL(MAX(composite_pk2), 0) + 1
       FROM issue_log
       WHERE composite_pk1  = NEW.composite_pk1
 );

END $$

我现在可以插入一条记录:

$stmt=$myDB->prepare('INSERT INTO my_table(composite_pk1, data) VALUES (?,?)');
$stmt->execute([123,'hello']);

如何获取最后一次插入composite_pk2PDO::lastInsertId仅适用于本机自动增量表(即不是触发器方法)。我“可以”稍后执行SELECT查询以获取最大值,但是,无法保证其他记录已经进入。

1 个答案:

答案 0 :(得分:1)

您可以composite_pk2 auto_increment使CREATE TABLE `my_table` ( composite_pk1 INT NOT NULL , composite_pk2 INT NOT NULL unique auto_increment, data VARCHAR(255) NOT NULL , primary key (composite_pk1, composite_pk2) ) ENGINE=InnoDB; 成为唯一键。

last_insert_id()

现在composite_pk2将返回最近为def readthefile(uploaded_file): file = open(uploaded_file, "rb") file.read() .... 创建的ID。