技術的には、シーケンス用の別のテーブルとBEFORE
トリガーを使用して MySQL でこれを実現できますが、
テーブル スキーマ:
CREATE TABLE articles_seq
(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
);
CREATE TABLE articles
(
`id` INT NOT NULL PRIMARY KEY DEFAULT 0,
`intro` VARCHAR(128),
`detail` VARCHAR(128),
`image` VARCHAR(128)
);
引き金:
DELIMITER $$
CREATE TRIGGER tg_bi_articles
BEFORE INSERT ON articles
FOR EACH ROW
BEGIN
INSERT INTO articles_seq () VALUES ();
SET NEW.id = LAST_INSERT_ID(),
NEW.image = CONCAT(NEW.id, '.jpg');
END$$
DELIMITER ;
このようにレコードを挿入できるようになりました
INSERT INTO articles (`intro`, `detail`, `image`) VALUES
('Intro text 1', 'Details text 1', '.jpg'),
('Intro text 2', 'Details text 2', '.png');
結果:
| | ID | はじめに | 詳細 | 画像 |
|----|--------------|----------------|-------|
| | 1 | 紹介文 1 | 詳細テキスト 1 | 1.jpg |
| | 2 | 導入文 2 | 詳細テキスト 2 | 2.jpg |
これがSQLFiddleのデモです
あなたはそれなしで良いです。代わりにビューを使用できます
CREATE TABLE articles
(
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
`intro` VARCHAR(128),
`detail` VARCHAR(128),
`ext` VARCHAR(32)
);
CREATE VIEW vw_articles AS
SELECT id, intro, detail, CONCAT(id, '.', ext) image
FROM articles;
これがSQLFiddleのデモです