MySQL按共享ID对行进行分组

时间:2012-09-05 01:33:13

标签: mysql

说我有

ID | PRODUCT
 1 |  Apples
 1 | Oranges
 1 | Bananas
 2 | Walnuts
 2 | Almonds
 3 | Steak
 3 | Chicken

这可能在MySQL中有这种类型的设置吗?我创建了一个测试表,并创建了一个带有主索引和自动递增的ID列。当我尝试插入所有具有相同ID的行时,mysql会返回错误。

这可以在mysql中完成吗?

3 个答案:

答案 0 :(得分:1)

INSERTED设置为主键时,重复记录( ID ID的效果如何?基本上,它不会。主键是UNIQUE。如果您希望记录类似,请创建另一列作为主键

CREATE TABLE sampleTable
(
    ID INT NOT NULL AUTO_INCREMENT, 
    GROUP_ID INT NOT NULL, 
    PRODUCT VARCHAR(25),
    CONSTRAINT pk_name PRIMARY KEY (ID),
    CONSTRAINT uq_name UNIQUE (GROUP_ID, PRODUCT)
)

添加了UNIQUE约束,以避免重复的行。

答案 1 :(得分:0)

这是可能的,但由于你有一个重复的主键,它没有规范化。主键必须是唯一的,这意味着1只能出现一次。如果您为每个ID设置了自定义product,则可以使用复合主键(id, product)或代理键。代理键是一个唯一标识该行的自动递增列。你的表格看起来像这样:

CREATE TABLE fruits (
  auto_id int AUTO_INCREMENT PRIMARY KEY,
  id int,
  product varchar(15))

答案 2 :(得分:0)

您不能为ID列创建主键,因为这意味着它是唯一的。 只需为您的示例采用正常索引。

另一方面,在大多数情况下,有一个主键是有意义的,所以我建议在其上添加一个普通INDEX的第三行(GENRE?)并保留主键。< / p>

插入数据时,只需插入GENRE和PRODUCT,ID就会自动填充。