我有一个自动增量列ID,用于某种情况我希望另一列等于主键+ 1值
ID | other
1 | 2
2 | 3
3 | 4
4 | 123 (some situation, it is not always plus 1)
我怎样才能做到这一点?
这是我尝试的内容
INSERT INTO table (`ID`,`other`) VALUES ('',(SELECT MAX(ID)+1 FROM table))
但是会返回错误
You can't specify target table 'table' for update in FROM clause
答案 0 :(得分:0)
尝试以下查询:
ALTER TABLE dbo.table ADD
Column AS ([ID]+1)
GO
一定会有效
答案 1 :(得分:0)
使用普通的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();
我最接近您正在寻找的是使用函数与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
应该保持序列事务安全,但我没有加载测试,所以你可能想要这样做。
答案 2 :(得分:0)
我通过更新数据库2次来解决这个问题。
我想从19岁开始做+1。
UPDATE `table` SET `id`=`id`+101 WHERE id <= 19
UPDATE `table` SET `id`=`id`-100 WHERE id <= 119 AND id >= 101