問題並不像看起來那麼容易。在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;
我沒有試過,但如果你只是參考ID-它無法正常工作在您的INSERT查詢中按名稱輸入字段? –
你嘗試過使用'TRIGGER'嗎? –
JW,我已經閱讀過如何使用'TRIGGER'來做這件事,它看起來有點太「離INSERT」很遠。如果我不能在INSERT中,我會保留'UPDATE'。 安德魯,我曾經假定它是否會在自動增量之前或之後取值,因此我剛剛嘗試了它。也許我錯了。我得到了「我是0號」。自動增量數據的設置沒有發生。即使它做到了,我仍然擔心它可能在不同的SQL上以不同的方式工作。 –