使用普通AUTO_INCREMENT
列作为 id,我想不出在 MySQL 中执行此操作的方法。触发器,否则将是一个选项,不能很好地与AUTO_INCREMENT
列一起使用。
我看到的唯一方法是对INSERT
;执行两个命令
INSERT INTO bop (value) VALUES ('These values should be 1 and 2');
UPDATE bop SET other = id+1 WHERE id = LAST_INSERT_ID();
一个用于测试的 SQLfiddle。
我最接近您正在寻找的内容是与AUTO_INCREMENT
使用函数分开生成序列,并使用它来生成表ID;
DELIMITER //
CREATE TABLE bop (
id INT UNIQUE,
other INT,
value VARCHAR(64)
)//
CREATE TABLE bop_seq ( seq INT ) // -- Sequence table
INSERT INTO bop_seq VALUES (1) // -- Start value
CREATE FUNCTION bop_nextval() RETURNS int
BEGIN
SET @tmp = (SELECT seq FROM bop_seq FOR UPDATE);
UPDATE bop_seq SET seq = seq + 1;
RETURN @tmp;
END//
CREATE TRIGGER bop_auto BEFORE INSERT ON bop
FOR EACH ROW
SET NEW.id = bop_nextval(), NEW.other=NEW.id + 1;
//
那会让你插入并让它像你想要的那样自动编号。应该保持序列事务的FOR UPDATE
安全,但我没有进行负载测试,所以你可能想要这样做。
另一个 SQLfiddle。