在插入操作期间在字符串连接中使用标识列

Use identity column in a string concat during an insert operation

假设我有一个 table 看起来像这样:

CREATE TABLE Foo (
    fooSn INT NOT NULL AUTO_INCREMENT,
    fooId VARCHAR(64) NOT NULL,
    PRIMARY KEY (fooSn)
)
ENGINE=InnoDB
ROW_FORMAT=DYNAMIC;

我想做这样的事情:

CREATE PROCEDURE insertWithAutoId (
    p_myPrefix VARCHAR(32) NOT NULL,
)
BEGIN
    INSERT INTO Foo
        (fooSn, fooId)
    VALUES
        (DEFAULT, CONCAT(p_myPrefix, DEFAULT));
END

这可能吗?

没有。无法在添加行的 INSERT 语句中引用分配给 AUTO_INCREMENT 列的值。该值在语句中不可用。它在 BEFORE INSERT 触发器中也不可用。

您可能想创建一个 AFTER INSERT 触发器,根据分配给 fooSn AUTO_INCREMENT 列的值将值分配给 fooId 列。但这需要更新刚刚插入的行,您会发现如果您尝试在 AFTER INSERT 触发器中执行此操作,MySQL 将引发错误 1442。