下面是表的格式:如何根據MySQL的一組中添加自動遞增ID
indexer group name id
1 abc a
2 abc b
3 xyz c
4 abc e
5 xyz d
現在我希望它像,
indexer group name id
1 abc a 1
2 abc b 2
3 xyz c 1
4 abc e 3
5 xyz d 2
「ID」應自動根據 「組」
下面是表的格式:如何根據MySQL的一組中添加自動遞增ID
indexer group name id
1 abc a
2 abc b
3 xyz c
4 abc e
5 xyz d
現在我希望它像,
indexer group name id
1 abc a 1
2 abc b 2
3 xyz c 1
4 abc e 3
5 xyz d 2
「ID」應自動根據 「組」
增加試試這個:
update yourtable t1
join (
select
tt.indexer, @rowno := if(@grp = `group`, @rowno + 1, 1) as id, @grp := `group`
from (select * from yourtable order by `group`, indexer) tt
cross join (select @rowno := 0, @grp := null) t
) t2
on t1.indexer = t2.indexer
set t1.id = t2.id
編輯:
如果要插入新行,你必須做這樣的:
insert into yourtable
select '$indexer', '$group', '$name', coalesce(max(id), 0) + 1
from yourtable
where name = '$name'
如果你想使用一個內置的功能,你必須使用MyISAM表。但請注意,那些不支持事務並使用表級鎖等。您可能需要閱讀相關內容。如果你對它很好,這是如何。如果你想使用InnoDB或其他引擎,你將不得不編寫自己的解決方案,即存儲過程。從manual
引用:
對於MyISAM表,可以在在多列索引的二次 列中指定AUTO_INCREMENT。在這種情況下,AUTO_INCREMENT列的生成值 計算爲 MAX(auto_increment_column)+ 1 WHERE prefix = given-prefix。當您想要將數據放入有序組時,這是 有用。
CREATE TABLE animals ( grp ENUM('fish','mammal','bird') NOT NULL, id MEDIUMINT NOT NULL AUTO_INCREMENT, name CHAR(30) NOT NULL, PRIMARY KEY (grp,id) ) ENGINE=MyISAM; INSERT INTO animals (grp,name) VALUES ('mammal','dog'),('mammal','cat'), ('bird','penguin'),('fish','lax'),('mammal','whale'), ('bird','ostrich'); SELECT * FROM animals ORDER BY grp,id; Which returns: +--------+----+---------+ | grp | id | name | +--------+----+---------+ | fish | 1 | lax | | mammal | 1 | dog | | mammal | 2 | cat | | mammal | 3 | whale | | bird | 1 | penguin | | bird | 2 | ostrich | +--------+----+---------+
在這種情況下(當AUTO_INCREMENT列是多列索引的一部分),如果刪除 行以任何組的最大AUTO_INCREMENT值AUTO_INCREMENT值重複使用。即使對於MyISAM表,這個 也會發生,通常AUTO_INCREMENT值 不會被重用。
如果AUTO_INCREMENT列是多個索引的一部分,MySQL將使用以 AUTO_INCREMENT列開頭的索引(如果有的話)生成序列值。例如,如果動物 表包含索引PRIMARY KEY(grp,id)和INDEX(id),則MySQL 將忽略用於生成序列值的PRIMARY KEY。作爲 的結果,該表格將包含單個序列,而不是每 grp值的序列。
在MySQL中不可能。你可以編寫一個存儲過程來執行計算下一個id的'INSERT',但是你可能會更好地從外部生成序列;無論你用什麼程序來插入數據。 –
無論如何,它沒有什麼意義,你想要做什麼? – polku
哦!哪裏有可能? –