gpt4 book ai didi

mysql - 在 MySQL 中,如何在 INSERT 时使用另一列中的自动增量值?

转载 作者:行者123 更新时间:2023-11-29 00:29:32 25 4
gpt4 key购买 nike

我希望在插入期间将自动设置的自动增量包含在另一列中。例如,在 ID 是自动增量而 Name 是另一列的表中,我想做类似的事情

`INSERT INTO Names (Name) VALUES (CONCAT("I am number ",ID));`

目前,我执行不带名称的 INSERT,然后我必须在使用 $mysqli->insert_id 执行更新后立即执行。

我不想提前查询表,因为在获取下一个自动增量值和插入之间可能会插入另一条记录,尽管时间可能很短。触发器可能会起作用,但似乎有点矫枉过正。我只想知道我是否可以在插入中引用自动增量。

非常感谢!

最佳答案

问题并不像看起来那么简单。在 BEFORE INSERT 触发器中,自动增量值尚未生成(NEW.autoinc_column0),而在 在 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_autoinc_lock_mode = 0(默认情况下不是这种情况),这也适用于 InnoDB 表,但我不确定(因为可能存在并发问题)。

但是如果 concat 的值总是相同的,你可能最好使用如下 View :

CREATE VIEW names_v AS SELECT id, CONCAT("I am number ", id) AS name FROM names;

关于mysql - 在 MySQL 中,如何在 INSERT 时使用另一列中的自动增量值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17266442/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com