【发布时间】:2012-03-12 20:10:02
【问题描述】:
到目前为止,我遇到过很多次,但仍然不明白(我的 MySQL 内部技能等于没有)。
我知道它可能是 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;
【问题讨论】:
-
我觉得这很难相信。根据定义,主键是唯一的,甚至不应该允许 NULL 值。如果 MySQL 允许这样做,我怀疑有人会考虑使用 MySQL。
-
你能发布你的创建表脚本吗?
-
我假设该表有多个 PK。如果一个表有两个 PK,那么它将创建一个包含两个列值的字符串,并连接起来。然后唯一性基于该值。因此,如果您在
x和y上进行了 PK,您可以拥有x -> 1, y -> 1和x -> 1, y -> 2,但如果您再次尝试x -> 1, y -> 1,它将失败(y也是如此)。 -
@Kemo 那么问题不在于 MySQL 是否允许重复 PK,问题在于您正在查看的数据库没有定义主键,也许是因为,正如您所提到的,它是用于存档目的,不需要此约束。
-
AUTO_INCREMENT不一定表示UNIQUE或PRIMARY键。表是否有主键或唯一键?
标签: mysql primary-key archive auto-increment