我们假设我有一张如下表:
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
这可能吗?
答案 0 :(得分:2)
没有。在添加行的INSERT语句中,无法引用分配给AUTO_INCREMENT列的值。该值在声明中不可用。它在BEFORE INSERT触发器中也不可用。
您可能想要创建一个AFTER INSERT触发器,根据分配给fooId
AUTO_INCREMENT列的值为fooSn
列分配值。但是这需要刚刚插入的行的UPDATE,你会发现如果你试图在AFTER INSERT触发器中执行此操作,MySQL将引发错误1442.