在插入操作期间在字符串连接中使用标识列
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。
假设我有一个 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。