mysql插入,其值等于主键+ 1

时间:2013-07-26 06:43:43

标签: mysql insert

我有一个自动增量列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

3 个答案:

答案 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();

An SQLfiddle to test with

我最接近您正在寻找的是使用函数与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应该保持序列事务安全,但我没有加载测试,所以你可能想要这样做。

Another SQLfiddle

答案 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