我有下表 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'子句仅在查询开始时评估一次。
答案 0 :(得分:1)
您可以启动事务执行select max(group_id)+1,然后执行插入操作。或者甚至通过锁定表,以便其他人不能改变(插入)它可能
答案 1 :(得分:0)
如果一个组代表属于一起的文件,我宁愿为这些组分配一个单独的表,特别是当你想要保存关于这个组的元数据时(比如上传用户,日期等)。否则(在这种情况下)你会得到冗余数据(这很糟糕 - 大部分时间)。
或者,MySQL确实有类似变量的东西。查看http://dev.mysql.com/doc/refman/5.1/en/set-statement.html