Pernyataan INSERT Bersyarat dalam MySQL
Soalan: Adakah boleh melaksanakan operasi INSERT secara bersyarat, sama seperti JIKA penyata?
Huraian:
Andaikan kami perlu membuat pesanan untuk 20 item dengan ID produk 2. Untuk memastikan stok mencukupi, kami terlebih dahulu menyemak kuantiti di tangan:
SELECT IF( ( SELECT SUM(qty) FROM orders WHERE product_id = 2 ) + 20 <= ( SELECT qty_on_hand FROM products WHERE id = 2) , 'true', 'false');
Jika hasilnya benar, kami melaksanakan pertanyaan INSERT. Walau bagaimanapun, pendekatan ini terdedah kepada isu konkurensi. Pesanan serentak berbilang boleh mengakibatkan penjualan berlebihan.
Jawapan:
Ya, pernyataan INSERT bersyarat boleh dilakukan menggunakan sintaks berikut:
INSERT INTO TABLE SELECT value_for_column1, value_for_column2, ... FROM wherever WHERE your_special_condition
Jika kenyataan SELECT tidak mengembalikan baris (iaitu, syarat khas adalah palsu), tiada sisipan berlaku.
Contoh:
Untuk skema yang diberikan:
products: id, qty_on_hand orders: id, product_id, qty
insert into orders (product_id, qty) select 2, 20 where (SELECT qty_on_hand FROM products WHERE id = 2) > 20;
Pertanyaan ini hanya akan memasukkan baris jika terdapat mencukupi stok di tangan. Jika tidak, ia tidak akan melaksanakan sisipan.
Atas ialah kandungan terperinci Bolehkah Penyata MySQL INSERT Dibuat Bersyarat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!