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。