MySQL 更新并返回计数
By admin
- One minute read - 57 words对于想使用 MySQL 实现简单 ID 分配器, 一般就是设置一个整数字段, 然后想分配的时候加 1 并返回. 新手往往犯错误, 先执行一条 update 语句, 然后再 select 那个字段. 但这是错误的!
CREATE TABLE `mytable` (
`counter` int(10) NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into mytable values(1);
正确的方式应该是使用 last_insert_id() 函数:
update mytable set counter=last_insert_id(counter+1);
select last_insert_id();
另一种方法(http://imysql.cn/2010/07/01/mysql-faq-using-mysql-as-serial-generator.html):
SELECT `ID` FROM `ID_RANGE_XX` ORDER BY ID LIMIT 1 FOR UPDATE
考虑到并发的问题,建议增加分表数量,每次循环或随机从分表中读取数据,降低对单个表的并发请求。