Mysql

mysql - 插入共享相同外鍵的多個值

  • May 11, 2020

我有以下表格:

create table countries (
   country_id tinyint unsigned,
   iso_alpha3_code varchar(4)
);

create table provinces (
   province_id bigint unsigned,
   province_name varchar(50),
   country_id tinyint unsigned,
   foreign key (country_id) references countries(country_id) on delete restrict on update cascade
);

插入記錄到省份,country_id需要對應的:

insert into provinces (province_name, country_id) VALUES 
   ('Alabama', (select country_id from countries where iso_alpha3_code = 'USA')), 
   ('California', (select country_id from countries where iso_alpha3_code = 'USA')),
   ('Alaska', (select country_id from countries where iso_alpha3_code = 'USA'));

如何在沒有重複選擇語句的情況下插入這些記錄來獲取外鍵?可以使用CTE之類的東西嗎?

**PS:**我找到了這個,但它是用於 postgreSQL 的。

這是另一種方法:

SELECT @usa := country_id from countries where iso_alpha3_code = 'USA';
insert into provinces (province_name, country_id) 
   VALUES 
   ('Alabama', @usa), 
   ('California', @usa),
   ('Alaska', @usa);

但我認為你不應該正常化country_code;只需使用標準的 3 字母(或 2 字母)程式碼。

2(或 1)字節的節省是微不足道的。的成本JOIN雖然很小,但非零。

如果您countries出於其他原因(人口、全名等)需要該表,則讓 3 或 2 字元程式碼成為該PRIMARY KEY表的“自然”。

引用自:https://dba.stackexchange.com/questions/266889