Mysql
如何在使用觸發器插入客戶名稱時將客戶表中的 cust_id 更新到訂單表 Cust_id 欄位
我有兩張表 1. Customer_details和 2. Order_details。
1.Customer_details表–>fields–> Cust_Id(Primary Key)和Customer_Name,
2.Order_details表–>欄位–Ord_Id(Primary Key), Cust_id
(Order_details 表中沒有客戶名稱欄位)。我正在嘗試通過外部應用程序將客戶訂單從 CSV 文件導入 order_details。CSV 文件包含客戶名稱而不是 Cust_ID。插入 order_details 時,我需要根據文件中的名稱查找 Cust_ID,然後將 Cust_ID 插入 order_details。這需要在數據庫級別而不是在應用程式碼中實現。我一直在尋找答案,但無法弄清楚。我可以使用觸發器來完成此操作嗎?
謝謝,阿庫布。
假設該
Customer_details
表已填充,您可以LOAD DATA INFILE
通過利用會話變數和SET
子句進行動態查找LOAD DATA INFILE '/path/to/order_details.txt' INTO TABLE order_details FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 LINES (ord_id, @customer_name) -- use a session variable to store a value read from the file SET cust_id = ( SELECT cust_id FROM customer_details WHERE customer_name = @customer_name -- use a session variable to get an id LIMIT 1 -- make sure that exactly one row is returned )
假設我們有一個包含以下內容的 CSV 文件
ord_id, customer_name 1,"客戶 1" 2,"客戶2" 3,“客戶2” 4,"客戶4"
讓我們嘗試導入它:
mysql> CREATE TABLE customer_details(`cust_Id` int, `customer_name` varchar(32)); 查詢正常,0 行受影響(0.02 秒) mysql> INSERT INTO Customer_details (`cust_Id`, `customer_name`) -> 值(1,'Customer1'),(2,'Customer2'),(3,'Customer3'),(4,'Customer4'); 查詢正常,4 行受影響(0.00 秒) 記錄:4 重複:0 警告:0 mysql> CREATE TABLE order_details (`ord_id` int, `cust_Id` int); 查詢正常,0 行受影響(0.02 秒) mysql> 載入數據輸入文件'/tmp/order_details.txt' -> INTO TABLE order_details -> 由 ',' 終止的欄位可選地由 '"' 封閉 -> 由 '\n' 終止的行 -> 忽略 1 行 -> (ord_id, @customer_name) -- 使用會話變數來儲存從文件中讀取的值 -> 設置 cust_id = -> ( -> 選擇 cust_id -> FROM customer_details -> WHERE customer_name = @customer_name -- 使用會話變數獲取 id -> LIMIT 1 -- 這是為了確保返回的正是一個 ->); 查詢正常,4 行受影響(0.00 秒) 記錄:4 刪除:0 跳過:0 警告:0 mysql> SELECT * FROM order_details o 加入 customer_details c ON o.cust_id = c.cust_id; +--------+---------+---------+---------------+ | ord_id | cust_Id | cust_Id | 客戶名稱 | +--------+---------+---------+---------------+ | 1 | 1 | 1 | 客戶1 | | 2 | 2 | 2 | 客戶2 | | 3 | 2 | 2 | 客戶2 | | 4 | 4 | 4 | 客戶4 | +--------+---------+---------+---------------+ 4 行一組(0.00 秒)
你有它。
首先將 csv 文件載入到一個臨時表中,其中包含 csv 輸入等所有列。之後,您可以使用連接插入 order_details 以獲取 cust_id:
insert into order_details(ord_id, cust_id) select t.ord_id, c.cust_id from temporarytable t JOIN customer_details c on t.customername=c.customername
也許您必須先將新客戶插入 customer_details。