2012-01-01 86 views
2

我想在MySQL中创建一个表的结构是这样的: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为每个新的独特区域增加

这是可能的吗?

回答

3

你想要什么是不可能的。你想idarea是主键,但在你的例子中,他们不是唯一的。

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

编辑:

您可以创建一个名为area_id例如一个额外的字段。您可以将自动增量功能添加到字段likE:

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`) 
); 
+0

谢谢,我只需要这样做。试图想出另一种解决方案,因为每个区域都必须有自己的ID。我猜我只需要添加另一列 - area_id。是否有可能auto_increment新列area_id,以便每个区域将有一个id类似于上面的示例中的id字段? – conor 2012-01-01 16:37:05

+0

是的,这是可能的。自动增量字段不必是主键。另一种可能性是将区域数据存储在一个表格中,并创建另一个表格来引用区域表格,以使第一个表格中的每个区域只有一个条目。然后你的id域将是唯一的。 – 2012-01-01 16:46:33

+0

不幸的是,第二个选项对于我设计的系统来说是不可能的,因为我不知道哪些数据将存储在区域表(它的一个插件架构,以便由插件本身决定)中。那么我怎么能得到自动增量工作,因为它在上面的例子(即绑定到区域字段)? – conor 2012-01-01 17:15:42

相关问题