簡體   English   中英

MySQL從另一個表插入國家iso或國家ID

[英]MySQL insert country iso or country id from another table

我想在我的數據庫中插入每個訪問者的國家/地區。 Maxmind返回我可以存儲在VARCHAR(2)的2個字母的國家ISO,它將使用2個字節,或者,我可以使用將使用1個字節的UNSIGNED TINYINT ,並且將是來自所有表的id那些國家。

然而我碰到了一個凹凸; 我需要MyISAM引擎進行快速插入,但MyISAM不支持FOREIGN KEYS ,所以我想對於每次插入,我都必須在countries表中進行選擇以檢索國家ID。

我不知道什么是最好的選擇,我絕對需要使用MyISAM因為會有很多插入,但我不想經常使用SELECTs來檢索國家ID。

如果您只需要2個字母的ISO國家/地區代碼(而不是國家/地區名稱,語言或其他信息),那么我會說將其存儲為沒有外部表的CHAR(2)將比存儲它更少資源。因為SMALLINT(TINYINT不足以涵蓋所有國家/地區),所以查找其他表格。

注意:在這種情況下不需要VARCHAR(2),CHAR(2)會更有效。

您可以從國家/地區表創建關聯數組。 將國家/地區ID作為此陣列的鍵。 然后將其提供給您的觀點。 因此,在視圖中,您可以對國家/地區陣列進行查找並顯示相關國家/地區。 例如

<?php echo $country[$customer['country_id']]['country_name']; ?>

獲得FK支持與沒有FK支持之間的唯一區別是確保完整性。 如果您使用支持FK的引擎,它將不允許您設置國家而不具有該記錄的ID。

這就是說,國家的數量是半靜態的,我們只談了幾百個...你可能會把所有這些保留在內存中,並且ID是可用的。

或者,您可以在插入期間執行選擇,如:

INSERT INTO sometable (col1,col2,country_id) VALUES('val1','val2', (SELECT id FROM countries WHERE iso_code = ?))

? 將是您的ISO值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM