我期待有包含在插入过程中的另一列的自动的设置自动增量。 例如,在一个表,其中ID是自动增量和名称是其他列,我想这样做
`INSERT INTO Names (Name) VALUES (CONCAT("I am number ",ID));`
目前,我做的INSERT没有名字,然后我必须做后立即使用$ mysqli-的更新> INSERT_ID。
我不想查询表提前,因为,尽可能小的,因为它可能是时间,另一个记录可以得到插入获得下自动增量值和插入之间。 触发可以工作,但似乎有点小题大做。 我只是想知道如果我可以插入内引用自动增量。
非常感谢!
这个问题并不像看起来那么容易。 在一个BEFORE INSERT
触发器,还没有生成自动增量值,但( NEW.autoinc_column
是0
),并且在一个AFTER INSERT
触发器,它是不可能的了改变要被插入的值。
MyISAM表,你可以检查下一个表定义AUTO_INCREMENT
值:
DELIMITER //
CREATE TRIGGER inserName BEFORE INSERT ON name FOR EACH ROW
BEGIN
DECLARE next_ai INT;
SELECT auto_increment INTO next_ai
FROM information_schema.tables
WHERE table_schema = DATABASE() AND table_name = 'name';
SET NEW.name = CONCAT("I am number ", next_ai);
END //
DELIMITER ;
我相信,这可能是与InnoDB表工作过,如果innodb_autoinc_lock_mode = 0
(默认情况下的情况下),但我不知道(因为可能并发问题)。
但是,如果值CONCAT是永远不变的,你可能有更好的使用视图,例如:
CREATE VIEW names_v AS SELECT id, CONCAT("I am number ", id) AS name FROM names;
我最近也面临这样的问题,虽然它可能不是最好的解决办法,我就是这样做可能是您的情况下可行的替代方案。 在我的情况就足够了。 你可以使用一个AFTER INSERT触发器与价值指的伪变量NEW更新字段。 这可能会给你更多的灵活性。 我需要填充字段与使用从自动递增列中的值来计算的字符串。 触发读取新的伪变量,计算必要的值,并执行该更新。 它仍然是需要两个高级别写acesses到数据库中,但都相继完成,而不需要与客户端应用程序(实际上,一个单一的INSERT语句从客户端应用程序发送的,进一步的交互遵循由隐更新)。
文章来源: In MySQL, how can I use the autoincrement value in another column at the time of the INSERT?