我們將改爲將枚舉的某些內容更改爲鏈接表的id。從枚舉更改爲鏈接表
我們該怎麼辦?
我們目前的枚舉名稱:strat
我們的新鏈接名稱:stratid
我在想什麼是沿着線的東西:
UPDATE table_name
SET stratid = (SELECT id FROM link_table WHERE stratname = table_name.strat);
我不創建的鏈接的表格中,現在它全是理論。
請問上述工作?
有什麼我應該改變,以便從枚舉轉移到鏈接表?
我們將改爲將枚舉的某些內容更改爲鏈接表的id。從枚舉更改爲鏈接表
我們該怎麼辦?
我們目前的枚舉名稱:strat
我們的新鏈接名稱:stratid
我在想什麼是沿着線的東西:
UPDATE table_name
SET stratid = (SELECT id FROM link_table WHERE stratname = table_name.strat);
我不創建的鏈接的表格中,現在它全是理論。
請問上述工作?
有什麼我應該改變,以便從枚舉轉移到鏈接表?
沒有陷阱作出比你其他的更新需要想使三重確保您link_table.id
s的在table_name.strat
選項定義的順序嚴格填充。
例如,如果strat
是enum('FOO', 'BAR')
那麼在linked_table
與id == 1
的記錄應該是「FOO」記錄。
之後,你可能想製作stratid
列NON NULL
;這並不完全等同於你之前的安排,但它可能更接近你想要的。
是,創建鏈接表第一,
設置stratname獨特,
使用自動增量ID
用於插入link_table懶惰的解決方案:
insert into link_table
select distinct strat from table_name order by strat;
但是,我不知道是所有預定義的枚舉正在使用。
此外,不知道枚舉的大小,
我不能建議你做一個手動插入。
如果你看一下枚舉...
enum('...', '...', ...) <-- is just a comma separated value
所以,這裏是查詢來獲取CSV: -
select column_type from information_schema.columns
where schema_name="table_name" and column_name = "strat";
您可以用編程語言結合起來,做link_table插入。
最後,您的UPDATE查詢不是非常優化,您可以切換到使用INNER JOIN。
但我認爲是一次性工作,所以要做到!
「嚴格按順序」是什麼意思?會有多個記錄使用相同的ID ... – Neal 2011-12-15 16:04:30