2012-03-12 100 views
0

到目前为止,我还是遇到过这样的几次,但仍然不明白(我的MySQL内部技能等于无)。在MySQL中导致重复PK的原因是什么?

我知道这可能是PEBKAC,但试图手动复制行为最终会出现错误(自动增量)。

CREATE TABLE `foo_bar` (
    `id` int(12) unsigned NOT NULL AUTO_INCREMENT, 
    `user_id` int(12) unsigned DEFAULT NULL, 
    `order_id` int(12) unsigned DEFAULT NULL, 
    `email_address` varchar(50) DEFAULT NULL, 
    `mobile_number` varchar(20) DEFAULT NULL, 
    `message` longtext NOT NULL, 
    `message_received` int(12) unsigned DEFAULT NULL, 
    `failed_to_send` tinyint(1) unsigned DEFAULT NULL, 
    `fraudulent_activity` tinyint(1) unsigned DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=ARCHIVE DEFAULT CHARSET=utf8; 
+7

我觉得这很难相信。主键,根据定义是唯一的,甚至不应该允许NULL值。如果MySQL允许这样做,我怀疑任何人会认为MySQL是认真的。 – Icarus 2012-03-12 20:14:04

+1

你可以发布你的创建表脚本吗? – ntziolis 2012-03-12 20:14:09

+2

我假设表有多个PK。如果一个表有两个PK,那么它将创建一个两列值的字符串,并加入。然后唯一性就是基于这个价值。所以如果你在'x'和'y'上有一个PK,你可以有'x - > 1,y - > 1'和'x - > 1,y - > 2',但是如果你尝试'x - > 1,y - > 1'(同样适用于'y')。 – Marshall 2012-03-12 20:17:03

回答

0

:会给出错误。

回答此问题,我可以关闭该问题。

0

当你的程序插入在数据库中的一行,它应该提供NULL作为自动增加字段中的值:

CREATE TABLE `customers` (
    `id` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY , 
    `name` VARCHAR(128) NOT NULL 
) ENGINE = MYISAM ; 


INSERT INTO `customers` (`id` , `name`) 
VALUES (NULL , 'Customer 1'), (NULL , 'Customer 2'); 

如果试图在id字段插入一个特定的值时,MySQL虽然回答“是什么原因导致这种”没上来,REPAIR TABLE解决了这个问题

SQL query: 

    INSERT INTO `customers` (`id` , `name`) 
    VALUES ('1', 'Customer 3'); 

MySQL said: 
#1062 - Duplicate entry '1' for key 'PRIMARY' 
+0

谢谢,但我已经表示,试图手动复制行为结束了一个错误:) – Kemo 2012-03-12 20:27:39

相关问题