要求是這樣的: 我有一個表存著基礎數據有一個字段是 管理號 我的目的是先查詢最新的管理號按照規則生成新管理號 然後insert到表裡新數據 由於查詢並不鎖表 所以在查詢到insert這步中間會有可能兩線程查詢到相同的管理號? 關鍵是如下的MYSQL語句, 插入多條記錄: [sql] INSERT INTO clients (client_id, client_name, client_type) SELECT supplier_id, supplier_name, 'advertising' FROM suppliers WHERE not exists (select * from clients where clients.client_id = suppliers.supplier_id); 插入單條記錄: [sql] INSERT INTO clients (client_id, client_name, client_type) SELECT 10345, 'IBM', 'advertising' FROM dual WHERE not exists (select * from clients where clients.client_id = 10345); 所以在插入時可以檢測管理號存在不存在,插入若不成功則取出目前的最新管理號,重新計算後再插入,直至成功。 這種情況很多的,比如火車、影院售票等,由於並發處理量很大,往往查詢到有票的,但實際下單時此票已售出,不知道這些系統是如何處理的。 作者 meditatorzhang