gpt4 book ai didi

mysql - 添加第二个自增字段并允许重复

转载 作者:可可西里 更新时间:2023-11-01 07:37:24 26 4
gpt4 key购买 nike

我有一个 EXISTING 表,它有一个名为 ID 的主键和 6 个与发票相关的其他字段。我需要从旧表中插入值并将所有值插入到新的但最近创建的表中。旧表列出了发票编号,有时发票编号重复。我需要我正在尝试创建的这个新列,称为 invoice_id 到 AUTO_INCREMENT 当没有为将要插入的 future 值插入任何值时,并允许对现有值和 future 值进行重复。当没有插入值时,需要auto_increment。

ID (primary) || invoice_ID (needs to auto_increment AND allow duplicates) || other colums
1 || 1
2 || 2
3 || 2
4 || 3

我已经尝试了一些命令,结果是这样的:

ALTER TABLE  `invoices` ADD  `invoice_ID` INT NOT NULL AUTO_INCREMENT AFTER  `ID` ,
ADD PRIMARY KEY ( `facture` )

结果:

MySQL said: 
#1075 - Incorrect table definition; there can be only one auto column and it must be
defined as a key

还尝试过:

ALTER TABLE  `invoices` ADD  `invoice_ID` INT NOT NULL AUTO_INCREMENT AFTER  `ID` ,
ADD KEY ( `invoice_ID` ) ,
ADD INDEX ( `invoice_ID` )

结果:

#1075 - Incorrect table definition; **there can be only one auto column** and it must 
be defined as a key

我也尝试了一些不同的选项,比如当然不添加为主键,但似乎只要我添加了 auto_increment 请求,它就会使我的查询“作为主键”。

最佳答案

您可以使用触发器来完成。这是一个例子。

所以你有你的旧表:

drop table if exists invoices_old;
create table invoices_old (
invoice_ID int,
another_column int
);

insert into invoices_old values
(1,11),
(2,12),
(2,13),
(3,14),
(4,15),
(5,16),
(6,17),
(6,18),
(7,19);

你想插入到你的新表中:

drop table if exists invoices_new;
create table invoices_new (
id int not null auto_increment,
invoice_ID int default null, /*it's important here to have a default value*/
another_column int,
primary key (id)
);

你可能像这样复制你的数据:

insert into invoices_new (invoice_ID, another_column)
select invoice_ID, another_column
from invoices_old;

现在您的数据已在新表中,您可以在新表上创建触发器来模拟 auto_increment 列。

drop trigger if exists second_auto_inc;
delimiter $$
create trigger second_auto_inc before insert on invoices_new
for each row
begin
set @my_auto_inc := NULL;
select max(invoice_ID) into @my_auto_inc from invoices_new;
set new.invoice_ID = @my_auto_inc + 1;
end $$
delimiter ;

现在,当您向新表中插入更多行时

insert into invoices_new (another_column)
select 20 union all select 21 union all select 22;

看看你的 table

select * from invoices_new;

有效。

结果:

id  invoice_ID  another_column
1 1 11
2 2 12
3 2 13
4 3 14
5 4 15
6 5 16
7 6 17
8 6 18
9 7 19
16 8 20
17 9 21
18 10 22

您可能想知道为什么在真正的 auto_increment 列中 ID 从 9 跳到 16。最近在 SO 上有一篇关于它的好帖子,但我现在找不到它。无论如何,这不是你需要担心的。 Auto_increment 用于确保唯一性,而不是无缝序列。

关于mysql - 添加第二个自增字段并允许重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17793020/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com