I have the following table:

我有下表:

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;

For a given composite_pk1, I wish composite_pk2 to act as an autoincrement primary key. I don't wish to lock the table, and as such plan on using a trigger such as the following:

对于给定的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 $$

I can now insert a record:

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

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

How do I get the last inserted composite_pk2? PDO::lastInsertId only works with native autoincrement tables (i.e. not the trigger approach). I "could" later do a SELECT query to get the max value, however, there is no guarantee that another record has snuck in.

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

1 个解决方案

#1


1

You can make composite_pk2 an unique key with auto_increment:

您可以使用auto_increment使composite_pk2成为唯一键:

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;

Now last_insert_id() will return the recently created id for composite_pk2.

现在last_insert_id()将返回最近为composite_pk2创建的id。

更多相关文章

  1. 更新mysql中的自动增量列+1?
  2. MYSQL如何导出存储过程和触发器?
  3. mysql 触发器 自动补全字段
  4. 在我的sql中调用触发器中的函数
  5. MYSQL在触发器中怎样实现‘根据条件来确定是否插入一条记录’?急!
  6. 急啊,在线等!!mysql 如何实现增量备份
  7. MySql_数据库触发器的使用
  8. sqlalchemy的基础使用,sqlalchemy调用外部创建的触发器
  9. 使用Python获得鼠标增量!(在Linux中)

随机推荐

  1. 【python coding 1:网络检测】ping本地文
  2. 在Python中搜索一个并行数组
  3. python的requests类库(一)requests库和urll
  4. uwsgi遇到ImportError: No module named
  5. Gunicorn + Django + Heroku。Python的路
  6. Python 【面向对象(类)】 学习笔记
  7. 为什么在Python中1 == True但是2!= True? [
  8. [python]练习之九九乘法表
  9. Python能不能方便的画三角形?
  10. win8.1 cygwin - pip正在安装到windows p