0

我有下表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”子句只会在查询开始时计算一次。

4

2 回答 2

1

您可以启动一个事务,执行 select max(group_id)+1,然后执行插入。或者甚至通过锁定表格以便其他人无法更改(插入)它是可能的

于 2012-04-15T09:01:19.753 回答
0

如果一个组代表属于一起的文件,我宁愿为这些组提供一个单独的表,特别是当您可能想要保存有关该组的元数据(如上传用户、日期等)时。否则(在这种情况下)你会得到冗余数据(这很糟糕——大多数时候)。

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

于 2012-04-15T11:39:19.303 回答