2011-08-11 37 views
13

Vấn đề lạ tôi dường như không thể xoay đầu. Tôi có một bảng trong một cơ sở dữ liệu MySQL với cấu trúc sau ...Mục nhập trùng lặp '2147483647' cho khóa 1

CREATE TABLE IF NOT EXISTS `tblbaseprices` (
    `base_id` bigint(11) NOT NULL auto_increment, 
    `base_size` int(10) NOT NULL default '0', 
    `base_label` varchar(250) default NULL, 
    `base_price_1a` float default NULL, 
    `base_price_2a` float default NULL, 
    `base_price_3a` float default NULL, 
    `base_price_1b` float default NULL, 
    `base_price_2b` float default NULL, 
    `base_price_3b` float default NULL, 
    `site_id` int(11) default NULL, 
    PRIMARY KEY (`base_id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=134 ; 

Các base_id cuối cùng tôi có ở đó là 132. Tôi cho rằng một vài hồ sơ đã bị xóa để auto_increment được thiết lập để 134, như bạn có thể xem. Tôi đang cố gắng chạy câu lệnh SQL sau đây, và khi tôi làm, tôi nhận được lỗi "Mục nhập trùng lặp" 2147483647 'cho khóa 1 ".

INSERT INTO tblbaseprices (site_id, base_size, base_price_1a, base_price_2a, base_price_3a, base_price_4a) VALUES ('', '', '', '', '', '') 

Có ai có ý tưởng nào không?

Rất cám ơn!

+0

Bất kỳ lý do tại sao bạn inseret chuỗi rỗng vào cột phao/int? – Jacob

+2

'base_price_4a' là gì? Tôi không thấy nó trong 'tạo bảng' của bạn. – sapht

+1

@sapht Nó có thể là lý do của lỗi. – Devart

Trả lời

4

Với bạn mã tôi đã nhận lỗi này - Unknown column 'base_price_4a' trong 'danh sách trường'. Điều đó có nghĩa là bạn đang cố gắng chèn vào một bảng khác (có thể trong một giản đồ khác) và bảng đó có khóa chính INT và AUTO_INCREMENT = 2147483647.

+1

Mắt tốt. @ Doyley: Vui lòng kiểm tra xem bạn có đang hiển thị cho chúng tôi cấu trúc bảng chính xác/hiện tại không! – Mchl

+0

@Mchl sapht có con mắt tốt ;-) – Devart

+0

Ah .. Tôi đã đăng một bảng từ cơ sở dữ liệu sai và đã xảy ra lỗi khi đăng mã lên bảng đó. Nó đã cố gắng để tạo ra một ID trong php sau đó gửi nó vào cột tăng tự động mà gây ra nó để tối đa. Cảm ơn bạn đã giúp đỡ! – Doyley

1

Bạn đang chèn các chuỗi trống vào các cột số. Theo như tôi thấy, bạn cũng chèn vào một cột không tồn tại trong lược đồ. Tôi đoán là điều này có liên quan đến lỗi của bạn.

+0

Tại sao điều đó lại quan trọng? Theo báo cáo tạo bảng site_id không phải là một chìa khóa ở tất cả. – hoppa

+0

Ồ, xin lỗi, tôi đã hiểu sai lệnh chèn, thứ tự lạ. – sapht

1

signed và unsigned vấn đề

alter table tblbaseprices 
modify column site_id int(10) unsigned NOT NULL; 

tham khảo - http://dev.mysql.com/doc/refman/5.0/en/numeric-type-overview.html

  • đảm bảo unsigned cho chính nước ngoài (trong trường hợp này có thể là site_id)
  • nó có thể được gây ra bởi kích hoạt ,
  • không có int(11), số tiền tối đa có thể là int(10)
  • không có nhu cầu để cho phép giá trị âm cho ID
  • trở nên phù hợp sử dụng cùng một kiểu dữ liệu cho chính chủ chốt
+0

Nhưng tại sao nó tự thể hiện ở AUTO_INCREMENT = 134? Cột PK là một tâm trí lớn. – Mchl

+0

Nó chỉ đề cập đến khóa 1, mà tôi có thể nghĩ là khóa ngoài – ajreal

+0

'Khóa 1' là khóa đầu tiên trong bảng (không có' khóa 0') và bảng này chỉ có một khóa. – Mchl

2

bạn đã đạt giới hạn số nguyên 32-bit, do đó ngăn ngừa sự tăng tự động từ tăng dần. chuyển đổi pk của bạn thành bigint với độ dài cột cao hơn nên khắc phục sự cố.

Ngoài ra, nếu PK của bạn không bao giờ bị âm, việc chuyển sang int không dấu sẽ cho bạn nhiều không gian hơn.

+1

Giới hạn số nguyên 32b ở mức 134? – Mchl

+0

không, "Mục nhập trùng lặp '2147483647' cho khóa 1", trong đó khóa 1 là khóa chính (EDIT: có vẻ như tôi đã tạo giả định xấu và nghĩ rằng có một số lượng lớn nhập xảy ra ...) – Jason

+0

Ngoài ra PK là một dấu mốc không dấu Rõ ràng là – Mchl

2

Hãy thử thay đổi cột auto_increment thành bigint thay vì int, sau đó giá trị tối đa sẽ là '9223372036854775807' hoặc thậm chí '18446744073709551615' nếu bạn đặt dấu này (không có giá trị nào dưới 0).

Thay đổi Auto_Increment của bạn thành id cuối cùng trong cột để tiếp tục từ vị trí còn lại.

Đảm bảo bạn không xóa auto_increment, nếu không nó sẽ tiếp tục tạo lỗi.

+0

cột PK đã là bigint – Mchl

0

Hôm nay tôi đã nhận lỗi duplicate key 2147483647

Tôi nghĩ rằng nó xuất hiện khi tôi đã cố gắng để chèn một bản ghi vào cơ sở dữ liệu từ phpMyAdmin, khi gõ, tôi cũng đã cố gắng để nhập giá trị quan trọng và đó là lông vịt thấp hơn so với hiện tại Next autoindex hoặc tôi đã cố gắng để gõ một cái gì đó giống như 99999999999999 như lĩnh vực then chốt, và điều đó gây ra nó để thiết lập Next autoindex để tối đa

Dù sao, erorr được gây ra bởi vì Next autoindex2147483647 cho bảng đó. bảng của tôi hoàn toàn trống rỗng vì vậy tôi cố định nó bằng cách truy vấn này:

ALTER TABLE table_name AUTO_INCREMENT = 0 

nếu bảng của bạn chứa dữ liệu, sau đó thay thế 0 với trọng tối đa của bạn cộng với 1

4

2147483647 là giá trị int lớn nhất cho mysql. Chỉ cần thay đổi loại từ int thành bigint.

0

đó là sự cố cơ sở dữ liệu. kiểm tra phpmyadmin của bạn> DB> cấu trúc của bạn, khóa chính của bạn nên được setted trong "bigint", không chỉ là "int"

0
CREATE TABLE IF NOT EXISTS `tblbaseprices` (
    `base_id` bigint(11) NOT NULL auto_increment, 
    `base_size` int(10) NOT NULL default '0', 
    `base_label` varchar(250) default NULL, 
    `base_price_1a` float default NULL, 
    `base_price_2a` float default NULL, 
    `base_price_3a` float default NULL, 
    `base_price_1b` float default NULL, 
    `base_price_2b` float default NULL, 
    `base_price_3b` float default NULL, 
    `site_id` int(11) default NULL, 
    PRIMARY KEY (`base_id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=134 ; 
-1

nhập trùng lặp '57.147-2147483647' cho khóa 'app_user' [INSERT INTO user_lookup (user_id , app_id, app_user_id, special_offers, ip_address) VALUES ('2.426.569', '57.147', '4009116545', 1, 1854489853)]

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