gpt4 book ai didi

sql - 如何在不过多往返数据库的情况下使用 SQL AUTOINCREMENT 主键?

转载 作者:行者123 更新时间:2023-12-03 17:32:33 25 4
gpt4 key购买 nike

假设我有 1000 万个客户名称,每个名称都与一个或多个地址相关联,我想将数据放入 SQL 数据库中。

我创建了一个 Customer 表和一个 Address 表。 Customer 表包含一个自动增量主键。每个 Address 条目都使用外键指向 Customer 表。

现在,对于 1000 万条记录中的每条记录,我必须创建一条客户记录,将其插入客户表,然后再次检索它以获取分配给它的自动增量主键,以用于新的地址条目。 2000 万次往返。呃。

除了求助于 GUID 之外还有更好的方法吗?

(我正好在使用 SQLite 和 SQLAlchemy)

最佳答案

这不是使用 SA,而是一个示例来说明在 Sqlite3 中的两个表中插入行而不是进行往返。

创建一个连接两个表的 View ,然后编写一个 instead of 触发器来处理插入,然后插入到您的 View 中。如果您想更进一步,修改 SA 以插入您的 View 应该不难。

create table customer (id integer primary key autoincrement, name text not null);

create table address (id integer primary key autoincrement, customer_id integer references customer not null, street text);

create view customer_view as
select customer.id as customer_id, customer.name, address.id as address_id, address.street
from customer
inner join address on customer.id = address.id;

create trigger customer_view_insert_trg
instead of insert on customer_view begin
insert into customer (name) values (new.name);
insert into address (customer_id, street) values ((select last_insert_rowid()), new.street);
end;

insert into customer_view (name, street) values ('Joe', 'Main Street');
insert into customer_view (name, street) values ('Bill', 'Water Street');

sqlite> select * from customer;
1|Joe
2|Bill

sqlite> select * from address;
1|1|Main Street
2|2|Water Street

关于sql - 如何在不过多往返数据库的情况下使用 SQL AUTOINCREMENT 主键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11688190/

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