例如:
CREATE TABLE test_serial_no_entity (
id BIGINT,
serial_no BIGINT NOT NULL UNIQUE,
PRIMARY KEY (id)
);
INSERT INTO test_serial_no_entity (id, serial_no) VALUES (1,1);
INSERT INTO test_serial_no_entity (id, serial_no) VALUES (2,2);
INSERT INTO test_serial_no_entity (id, serial_no) VALUES (3,3);
INSERT INTO test_serial_no_entity (id, serial_no) VALUES (4,4);
serial_no是一个唯一的列,当我执行sql:update test_serial_no_entity set serial_no=serial_no+1 where id>=1
时,
我在mysql中得到错误Error Code: 1062. Duplicate entry '2' for key 'serial_no' 0.034 sec
,除了取消唯一约束外,还有其他方法可以解决这个问题吗?
答案 0 :(得分:2)
是,先更新较高的值。
update test_serial_no_entity
set serial_no=serial_no+1
where id>=1
ORDER BY serial_no DESC
也可以在manual。
中找到此示例答案 1 :(得分:-1)
尝试循环以一次更新一条记录。从最大数字开始。
CREATE TABLE test_serial_no_entity (
id BIGINT,
serial_no BIGINT NOT NULL UNIQUE,
PRIMARY KEY (id)
);
INSERT INTO test_serial_no_entity (id, serial_no) VALUES (1,1);
INSERT INTO test_serial_no_entity (id, serial_no) VALUES (2,2);
INSERT INTO test_serial_no_entity (id, serial_no) VALUES (3,3);
INSERT INTO test_serial_no_entity (id, serial_no) VALUES (4,4);
Declare @Min int, @Iterator int
Select @Min = min(serial_no) from test_serial_no_entity
Select @Iterator = max(serial_no) from test_serial_no_entity
While(@Iterator >= @Min)
BEGIN
Update test_serial_no_entity
Set serial_no = serial_no + 1
Where serial_no = @Iterator
@Iterator = @Iterator - 1
END
答案 2 :(得分:-2)
尝试在您的ID后面添加AUTO_INCREMENT
id BIGINT NOT NULL AUTO_INCREMENT