问题并不像看起来那么容易。在BEFORE INSERT
触发器中,尚未生成自动增量值(NEW.autoinc_column
is 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;