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

时间:2016-09-08 03:48:05

标签: mysql insert auto-increment

我们假设我有一张如下表:

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

这可能吗?

1 个答案:

答案 0 :(得分:2)

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

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