2012-04-15 50 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,然後執行插入操作。或甚至通過鎖定表,以便其他人不能更改(插入)到它將是可能的

相關問題