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

Mysql 在插入操作期间在字符串concat中使用标识列,mysql,insert,auto-increment,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 I

假设我有一张这样的桌子:

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
我想这样做:

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语句中引用分配给自动增量列的值。该值在语句中不可用。它在插入前触发器中也不可用


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

如果您确实需要,这里是一种方法,它很复杂,但可以工作!谢谢你的提醒,但我不认为我会走这条路。我会检查将
fooId
列存储为字符串前缀和自动插入返回值的串联的要求。作为另一种选择,考虑将前缀存储在单独的列中。如果需要合并(连接)两列,请在需要它的查询的选择列表中使用表达式。但是我们不希望在谓词中使用CONCAT()表达式(即WHERE子句中的条件)。@spencer7593,问题是
fooId
,可以是自动id,也可以是显式设置的id。它是标识列的sequentialid的唯一自然id。