2012-04-15 33 views
0

我有以下表格my_table主键id设置为AUTO_INCREMENT。如何添加一组“行”并在MySQL中增加他们的“组ID”?

id group_id data_column 
1 1   'data_1a' 
2 2   'data_2a' 
3 2   'data_2b' 

我被困试图建立一个查询,将采取一组数据,说[ 'data_3a', 'data_3b'],并适当增加了GROUP_ID产生:

id group_id data_column 
1 1   'data_1a' 
2 2   'data_2a' 
3 2   'data_2b' 
4 3   'data_3a' 
5 3   'data_3b' 

我认为使用WITH子句很容易,但这在MySQL中不受支持。我对SQL很陌生,所以也许我正在组织我的数据错误的方式? (一组应该表示一组通过表单上传的文件,每行是一个文件,数据列存储它的路径)。

的“SQL的伪”的代码,我脑子里想的是:

INSERT INTO my_table (group_id, data_column) 
VALUES ($NEXT_GROUP_ID, 'data_3a'), ($NEXT_GROUP_ID, 'data_3b') 
LETTING $NEXT_GROUP_ID = (SELECT MAX(group_id) + 1 FROM my_table) 

,其中由“让”条款只会在查询开始评估一次。

+0

在我看来,如果您能够从其他字段的值构造“data_column”的值,“data_column”在功能上将依赖于其他字段,因此是多余的。如果它是真实的数据,则有人必须输入它。 – wildplasser 2012-04-15 11:51:46

回答

0

我宁愿有一个单独的表组,如果一个组代表文件属于一起,尤其是当你可能想要保存关于这个组的元数据(如上传用户,日期等)。否则(在这种情况下)你会得到冗余数据(这是不好的 - 大部分时间)。

另外,MySQL确实有类似变量的东西。检查出http://dev.mysql.com/doc/refman/5.1/en/set-statement.html

+1

谢谢,为这些团体提供一张单独的桌子很有意义。 – mmunoz 2012-04-15 16:56:58

1

您可以开始一个事务做一个select max(group_id)+1,然后执行插入操作。或甚至通过锁定表,以便其他人不能更改(插入)到它将是可能的