我有下表:
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_pk2
? PDO::lastInsertId
仅适用于本机自动增量表(即不是触发器方法)。我“可以”稍后执行SELECT查询以获取最大值,但是,无法保证其他记录已经进入。
答案 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。