如何添加尚不存在的整数?

Hol*_*orf 0 sql sql-server

如果我有一个包含INCREMENT_NUMBER列的表A. 我们会说有五行.

1
2
3
4
4
Run Code Online (Sandbox Code Playgroud)

如果用户向表A添加新行,则该行的INCREMENT_NUMBER列应为5.(可能是任何内容,只要它不是1-4号.)请记住

INCREMENT_NUMBER integer auto_increment primary key
Run Code Online (Sandbox Code Playgroud)

将无法工作,因为我需要允许表中的重复,我不认为

insert
Run Code Online (Sandbox Code Playgroud)

ype*_*eᵀᴹ 5

如果要允许重复,请不要将其声明为PRIMARY KEY(并且不对其进行UNIQUE约束).

MySQL的一个AUTO_INCREMENT被允许有重复在这种情况下-你只需要在其上添加一个简单的指标:

CREATE TABLE test
( increment_number INTEGER NOT NULL AUTO_INCREMENT
, INDEX inc_index (increment_number)
) ;

INSERT INTO test
VALUES (1),(2),(3),(4),(4);
Run Code Online (Sandbox Code Playgroud)

在SQL-Fiddle中测试:test-1

INSERT INTO test
VALUES
(NULL);

SELECT *
FROM test ;
Run Code Online (Sandbox Code Playgroud)

结果是:

increment_number
----------------
1
2
3
4
4
5
Run Code Online (Sandbox Code Playgroud)

SQL-Server中,您必须切换IDENTITY_INSERT设置ONOFF具有类似的行为:

CREATE TABLE test
( increment_number INT IDENTITY(1,1) NOT NULL 
, name varchar(20) NOT NULL
) ;

SET IDENTITY_INSERT test ON ;

INSERT INTO test (increment_number, name)
VALUES 
(1, 'Alex'),
(2, 'Bill'),
(3, 'Cathy'),
(4, 'Diana'),
(4, 'Dean');
Run Code Online (Sandbox Code Playgroud)

然后测试2:

SET IDENTITY_INSERT test OFF ;

INSERT INTO test (name)
VALUES
('Elaine') ;

SELECT *
FROM test ;
Run Code Online (Sandbox Code Playgroud)

结果是:

increment_number  |  name
---------------------------
1                    Alex
2                    Bill
3                    Cathy
4                    Diana
4                    Dean
5                    Elaine 
Run Code Online (Sandbox Code Playgroud)