2012-01-06 63 views
46

Tôi đã tạo một bảng có khóa chính và được bật AUTO_INCREMENT, làm thế nào để sử dụng MYSQL AUTO_INCREMENT?Làm cách nào để chèn dữ liệu vào MySQL có khóa chính tăng tự động?

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) 
); 

Đây là truy vấn tôi đã sử dụng, tôi đã thử "" và "1" cho giá trị đầu tiên nhưng nó không hoạt động.

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'); 

Trả lời

42

Để tận dụng khả năng tăng tự động của cột, không cung cấp giá trị cho cột đó khi chèn hàng. Cơ sở dữ liệu sẽ cung cấp một giá trị cho bạn.

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' 
); 
+76

Hoặc chỉ cần vượt qua NULL –

+0

nhưng truy vấn mà bạn dán cho tôi bạn đặt giá trị cho phím mồi ?? –

+2

@SalmanRaza: không, hãy xem: cột "hostcheck_id" bị thiếu trong truy vấn tôi đã đề xuất. Tôi đã đưa ra giá trị cho chỉ 23 cột nhưng có 24 cột trong bảng. Tôi đoán gợi ý của Adrian sẽ làm việc quá, nhưng tôi không biết bạn có thể làm điều đó! – Celada

86

Đặt lĩnh vực tự động tăng để NULL hoặc 0 nếu bạn muốn nó được tự động một cách kỳ diệu giao ...

+2

+1 Đây là giải pháp đơn giản nhất. – CodeBlue

+0

Điều này làm việc cho tôi không giống như bỏ qua giá trị cột autoincrement. – ASten

+0

Đây phải là câu trả lời được chấp nhận. –

5

Check-out this bài

Theo đó

Không giá trị đã được chỉ định cho cột AUTO_INCREMENT, do đó, MySQL được gán số thứ tự tự động. Bạn cũng có thể rõ ràng gán NULL hoặc 0 cho cột để tạo số thứ tự.

6

Từ khóa default làm việc cho tôi:

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) 

Tôi đang chạy mysql --version 5.1.66:

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

Bạn có thể để tên cột ra miễn là các giá trị khớp với thứ tự của các cột. Nó có thể được coi là thực hành xấu để làm điều đó, nhưng đối với một chèn nhanh một lần nó là một giải pháp tốt. – Shahar

+0

@Shahar Điều này tốt hơn nhiều so với việc bỏ tên cột ra. Bằng cách này, bạn có một ý tưởng tốt hơn về những gì đang xảy ra trong SQL của bạn – user3284463

+0

@ user3284463 Tôi hoàn toàn đồng ý, tôi chỉ nghĩ rằng nó đáng nói đến. – Shahar

Các vấn đề liên quan