MySQL में डेटा कैसे बढ़ाना है?


86

मैंने एक प्राथमिक कुंजी के साथ एक तालिका बनाई है और सक्षम किया है AUTO_INCREMENT, मैं MYSQL का उपयोग कैसे कर सकता हूं AUTO_INCREMENT?

CREATE TABLE IF NOT EXISTS test.authors (
    hostcheck_id INT PRIMARY KEY AUTO_INCREMENT,
    instance_id INT,
    host_object_id INT,
    check_type INT,
    is_raw_check INT,
    current_check_attempt INT,
    max_check_attempts INT,
    state INT,
    state_type INT,
    start_time datetime,
    start_time_usec INT,
    end_time datetime,
    end_time_usec INT,
    command_object_id INT,
    command_args VARCHAR(25),
    command_line VARCHAR(100),
    timeout int,
    early_timeout INT,
    execution_time DEC(18,5),
    latency DEC(18,3),
    return_code INT,
    output VARCHAR(50),
    long_output VARCHAR(50),
    perfdata VARCHAR(50)
);

यहां मेरे द्वारा उपयोग की जाने वाली क्वेरी है, मैंने पहले मूल्य के लिए "" और "1" की कोशिश की है लेकिन यह काम नहीं करता है।

INSERT INTO  test.authors VALUES ('1','1','67','0','0','1','10','0','1',
'2012-01-03 12:50:49','108929','2012-01-03 12:50:59','198963','21','',
'/usr/local/nagios/libexec/check_ping  5','30','0','4.04159','0.102','1',
'PING WARNING -DUPLICATES FOUND! Packet loss = 0%, RTA = 2.86 ms','',
'rta=2.860000m=0%;80;100;0'); 

जवाबों:


72

कॉलम की ऑटो-इन्क्रिमेंटिंग क्षमता का लाभ उठाने के लिए, पंक्तियों को सम्मिलित करते समय उस कॉलम के लिए एक मूल्य की आपूर्ति न करें। डेटाबेस आपके लिए एक मूल्य प्रदान करेगा।

INSERT INTO test.authors (
   instance_id,host_object_id,check_type,is_raw_check,
   current_check_attempt,max_check_attempts,state,state_type,
   start_time,start_time_usec,end_time,end_time_usec,command_object_id,
   command_args,command_line,timeout,early_timeout,execution_time,
   latency,return_code,output,long_output,perfdata
) VALUES (
   '1','67','0','0','1','10','0','1','2012-01-03 12:50:49','108929',
   '2012-01-03 12:50:59','198963','21','',
   '/usr/local/nagios/libexec/check_ping  5','30','0','4.04159',
   '0.102','1','PING WARNING -DUPLICATES FOUND! Packet loss = 0%, RTA = 2.86 ms',
   '','rta=2.860000m=0%;80;100;0'
);

133
या सिर्फ NULL
एड्रियन कोर्निश

लेकिन आपके द्वारा मेरे लिए चिपकाई गई क्वेरी आपने प्राइमरी कुंजी के लिए मूल्य रखा है ??
सलमान रज़ा

3
@SalmanRaza: नहीं, देखो: कॉलम "hostcheck_id" मेरे द्वारा सुझाई गई क्वेरी से गायब है। मैंने केवल 23 स्तंभों के लिए मान दिए, लेकिन तालिका में 24 स्तंभ हैं। मुझे लगता है कि एड्रियन का सुझाव भी काम करेगा, लेकिन मुझे नहीं पता था कि आप ऐसा कर सकते हैं!
सेलदा

4
@ इस साइट के बारे में महान बात - आप अपना जवाब सही होने पर भी कुछ सीखते हैं :-)
एड्रियन कोर्निश

1
@ सभी आपके उत्तर के लिए धन्यवाद! यह मेरी मदद करता है कि मैं प्राइमरी कुंजी कॉलम के लिए '0' मान पास करूं
सलमान रज़ा

153

ऑटो वेतन वृद्धि क्षेत्र को NULL या 0 पर सेट करें यदि आप चाहते हैं कि यह ऑटो जादुई रूप से सौंपा जाए ...


यह मेरे लिए ऑटोइन्क्रिमेंट कॉलम मान स्किप करने के विपरीत काम करता है।
एसेन

3
पसंद करें NULL, जैसा 0कि NO_AUTO_VALUE_ON_ZERO द्वारा व्यवहार को प्रभावित किया जा सकता है ।
बेंजामिन

14

defaultकीवर्ड मेरे लिए काम करता है:

mysql> insert into user_table (user_id, ip, partial_ip, source, user_edit_date, username) values 
(default, '39.48.49.126', null, 'user signup page', now(), 'newUser');
---
Query OK, 1 row affected (0.00 sec)

मैं mysql --version5.1.66 चला रहा हूं:

mysql  Ver 14.14 Distrib **5.1.66**, for debian-linux-gnu (x86_64) using readline 6.1

जब तक मान स्तंभों के क्रम से मेल खाते हैं, तब तक आप स्तंभ नामों को छोड़ सकते हैं। इसे करने के लिए इसे बुरा अभ्यास माना जा सकता है, लेकिन एक बार की त्वरित प्रविष्टि के लिए यह एक अच्छा उपाय है।
शौहर

@Shahar यह कॉलम नाम छोड़ने से बहुत बेहतर है। इस तरह, आपके पास अपने एसक्यूएल में क्या चल रहा है, इसका एक बेहतर विचार है
गोलसैंम्बल्स

@ user3284463 मैं पूरी तरह से सहमत हूं, मुझे लगता है कि यह उल्लेख के लायक है।
शाहर

1
हाँ, समस्या यह है कि आदेश अब मेल कर सकता है, लेकिन जरूरी नहीं है कि जब वर्ग LATER चलाया जाता है।
काजकाई

बहुत बहुत धन्यवाद, पोट्रेज़ के लिए 10.10 को 0 या शून्य मान रखने की अनुमति नहीं है, लेकिन डिफ़ॉल्ट रूप से यह काम करता है;
tarmogoyf

11

की जाँच करें इस पोस्ट

इसके अनुसार

AUTO_INCREMENT कॉलम के लिए कोई मान निर्दिष्ट नहीं किया गया था, इसलिए MySQL ने अनुक्रम संख्या स्वचालित रूप से निर्दिष्ट की। आप अनुक्रम संख्या उत्पन्न करने के लिए कॉलम में स्पष्ट रूप से NULL या 0 असाइन कर सकते हैं।


3

मुझे यहां तीन संभावनाएं दिखाई देती हैं जो आपको पूरी गड़बड़ी किए बिना आपकी तालिका में सम्मिलित करने में मदद करेंगी लेकिन AUTOINCEMENT के लिए एक मान "निर्दिष्ट" कर रही हैं कॉलम के कर रही है, क्योंकि आप उन सभी मूल्यों की आपूर्ति कर रहे हैं जो आप निम्न विकल्पों में से किसी एक में कर सकते हैं।

पहला तरीका ( NULL की आपूर्ति करना ):

INSERT INTO test.authors VALUES (
 NULL,'1','67','0','0','1','10','0','1','2012-01-03 12:50:49','108929',
 '2012-01-03 12:50:59','198963','21','',
 '/usr/local/nagios/libexec/check_ping  5','30','0','4.04159',
 '0.102','1','PING WARNING -DUPLICATES FOUND! Packet loss = 0%, RTA = 2.86 ms',
 '','rta=2.860000m=0%;80;100;0'
);

दूसरा तरीका (आपूर्ति करना '' {सरल उद्धरण / प्रेरित}} हालांकि यह आपको चेतावनी देगा):

INSERT INTO test.authors VALUES (
 '','1','67','0','0','1','10','0','1','2012-01-03 12:50:49','108929',
 '2012-01-03 12:50:59','198963','21','',
 '/usr/local/nagios/libexec/check_ping  5','30','0','4.04159',
 '0.102','1','PING WARNING -DUPLICATES FOUND! Packet loss = 0%, RTA = 2.86 ms',
 '','rta=2.860000m=0%;80;100;0'
);

तीसरा दृष्टिकोण ( डिफ़ॉल्ट का अर्थ है ):

INSERT INTO test.authors VALUES (
 default,'1','67','0','0','1','10','0','1','2012-01-03 12:50:49','108929',
 '2012-01-03 12:50:59','198963','21','',
 '/usr/local/nagios/libexec/check_ping  5','30','0','4.04159',
 '0.102','1','PING WARNING -DUPLICATES FOUND! Packet loss = 0%, RTA = 2.86 ms',
 '','rta=2.860000m=0%;80;100;0'
);

या तो इन उदाहरणों में से एक को उस तालिका में सम्मिलित करते समय पर्याप्त होना चाहिए जब तक कि आप सभी मानों को उसी क्रम में शामिल करते हैं जब तक कि आपने तालिका बनाते समय उन्हें परिभाषित नहीं किया था।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.