Используя нормальный 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();
An SQLfiddle to test with.
Ближайшее я получаю от того, что вы ищете, чтобы генерировать последовательности отдельно от AUTO_INCREMENT
с использованием функции и использовать вместо этого для генерации идентификатора таблицы;
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
должен сохранять транзакцию последовательности в безопасности, но я не тестировал нагрузку, поэтому вы можете это сделать.
Another SQLfiddle.
Первого правила спрашивать здесь - показать нам свой код и что вы попытался добиться этого сам. –
вы можете использовать триггер на этой таблице. обновить «другой» столбец после вставки обновления данных tablename set other = ID + 1 –
Если это всегда будет ID + 1, зачем он должен быть отдельным столбцом? Вы можете использовать его в запросах, ссылаясь на «id + 1», например SELECT id + 1 AS other from; –