如何在MySQL中添加“组”行并增加其“组ID”?

时间:2012-04-15 08:48:54

标签: mysql sql

我有下表 my_table ,主键 id 设置为AUTO_INCREMENT。

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的新手,所以也许我正在以错误的方式组织我的数据? (组应该表示通过表单一起上载的一组文件。每行是单个文件,数据列存储其路径)。

我想到的“Psuedo 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)

其中组成的'LETTING'子句仅在查询开始时评估一次。

2 个答案:

答案 0 :(得分:1)

您可以启动事务执行select max(group_id)+1,然后执行插入操作。或者甚至通过锁定表,以便其他人不能改变(插入)它可能

答案 1 :(得分:0)

如果一个组代表属于一起的文件,我宁愿为这些组分配一个单独的表,特别是当你想要保存关于这个组的元数据时(比如上传用户,日期等)。否则(在这种情况下)你会得到冗余数据(这很糟糕 - 大部分时间)。

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