【问题标题】:mysql not unique auto increment, primary key two fieldsmysql不是唯一的自增,主键两个字段
【发布时间】:2012-01-31 10:02:14
【问题描述】:

我想在 MySQL 中创建这样的表结构:

id  |  area    |  name 
----+----------+------------
1   |  name-1  |  test 
    |          |
1   |  name-1  | value2
    |          |
2   |  name-2  | test-value
    |          | 
3   |  name-3  | test
    |          |
3   |  name-3  | test

即。主键为:primary_key( id, area ),id 为auto_increment,但我只希望 id 为每个新的唯一区域递增

这可能吗?

【问题讨论】:

    标签: mysql primary-key unique auto-increment


    【解决方案1】:

    你想要的都是不可能的。您希望 idarea 成为主键,但在您的示例中它们不是唯一的。

    如果您定义表键,它必须是唯一的,在您的示例中,这意味着您需要在主键中包含 name。但是为什么不只将id 设为主键并自动递增呢?这是常见的用法。

    编辑:

    例如,您可以创建一个名为 area_id 的额外字段。您可以像这样向字段添加自动增量功能:

    CREATE  TABLE `areas` 
    (
      `id` INT NOT NULL ,
      `area_id` INT NOT NULL AUTO_INCREMENT ,
      `area` VARCHAR(100) NULL ,
      `name` VARCHAR(100) NULL ,
      PRIMARY KEY (`id`) 
    );
    

    【讨论】:

    • 谢谢,我只需要这样做。正在尝试考虑另一种解决方案,因为每个区域都必须有自己的 id。我猜我只需要添加另一列 - area_id。是否可以自动增加新列 area_id 以便每个区域的 id 类似于上例中的 id 字段?
    • 是的,这是可能的。自增字段不必是主键。您的另一种可能性可能是将区域数据存储在一个表中并创建另一个引用区域表的表,以实现第一个表中的每个区域只有一个条目。然后您的 idfield 将是独一无二的。
    • 不幸的是,第二个选项对于我正在设计的系统是不可能的,因为我不知道哪些数据将存储在区域表中(它是一个插件架构,因此将由插件本身)。那么我怎样才能让自动增量像上面的例子一样工作(即绑定到区域字段)?
    猜你喜欢
    • 2020-11-04
    • 2013-09-27
    • 1970-01-01
    • 2011-07-21
    • 2010-11-12
    • 2020-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多