MySQL में तभी रिकॉर्ड डालें जब टेबल खाली हो, इसके लिए NOT EXISTS सबक्वेरी के साथ INSERT ... SELECT का उपयोग करें।
सिंटैक्स
INSERT INTO yourTableName(yourColumnName)
SELECT 'anyValue'
WHERE NOT EXISTS (SELECT * FROM yourTableName);
कैसे काम करता है
SELECT 'anyValue'- डालने वाला मानWHERE NOT EXISTS (...)- टेबल खाली होने पर TRUE (1 पंक्ति), भरे होने पर FALSE (0 पंक्ति)- सबक्वेरी
SELECT * FROM yourTableNameकोई पंक्ति नहीं लौटाती यदि टेबल खाली है
उदाहरण के साथ समझें
टेबल बनाएं:
CREATE TABLE ExecuteInsertDemo (
Name VARCHAR(20)
);
स्थिति 1: टेबल खाली नहीं है
INSERT INTO ExecuteInsertDemo VALUES('John'); -- 1 रिकॉर्ड पहले से मौजूद
-- अब INSERT का प्रयास
INSERT INTO ExecuteInsertDemo(Name)
SELECT 'Larry'
WHERE NOT EXISTS (SELECT * FROM ExecuteInsertDemo);
परिणाम: Query OK, 0 rows affected - कोई रिकॉर्ड नहीं डाला गया
SELECT * FROM ExecuteInsertDemo;
+------+
| Name |
+------+
| John |
+------+
स्थिति 2: टेबल खाली करें और फिर कोशिश करें
TRUNCATE TABLE ExecuteInsertDemo; -- टेबल खाली
INSERT INTO ExecuteInsertDemo(Name)
SELECT 'Larry'
WHERE NOT EXISTS (SELECT * FROM ExecuteInsertDemo);
परिणाम: Query OK, 1 row affected
SELECT * FROM ExecuteInsertDemo;
+-------+
| Name |
+-------+
| Larry |
+-------+
व्यावहारिक उपयोग के मामले
1. डिफॉल्ट/कॉन्फिगरेशन रिकॉर्ड डालना
INSERT INTO settings (setting_key, setting_value)
SELECT 'app_version', '1.0.0'
WHERE NOT EXISTS (SELECT 1 FROM settings WHERE setting_key = 'app_version');
2. एकल-पंक्ति टेबल (सिंगलटन) के लिए
INSERT INTO app_config (id, config_json)
SELECT 1, '{"theme":"dark","lang":"hi"}'
WHERE NOT EXISTS (SELECT 1 FROM app_config WHERE id = 1);
3. एकाधिक कॉलम के साथ
INSERT INTO users (username, email, role, created_at)
SELECT 'admin', 'admin@example.com', 'admin', NOW()
WHERE NOT EXISTS (SELECT 1 FROM users WHERE username = 'admin');
वैकल्पिक: INSERT IGNORE / ON DUPLICATE KEY
यदि यूनिक कंस्ट्रेंट है:
INSERT IGNORE INTO ExecuteInsertDemo(Name) VALUES('Larry');
-- या
INSERT INTO ExecuteInsertDemo(Name) VALUES('Larry')
ON DUPLICATE KEY UPDATE Name = VALUES(Name);
नोट
- यह तरीका **परमाणु (एटॉमिक)** है - रेस कंडीशन सुरक्षित
TRUNCATEऑटो_इन्क्रीमेंट रीसेट करता है,DELETEनहीं- बड़े टेबल पर
EXISTSतेज है क्योंकि पहली पंक्ति मिलते ही रुक जाता है