您的位置:首页 > 数据库 > MySQL

分表保持id自增方式

2015-09-15 14:12 387 查看
1、replace into
如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据。否则,直接插入新数据。

用法:

insert into t(... , ...) values(... , ...)
修改为
replace into t(... , ...) values(... , ...)

2、清空表truncate table

truncate table 你的表名 //这样不但将数据全部删除,而且重新定位自增的字段

 truncate命令是会把自增的字段还原为从1开始的,或者你试试把table_a清空,然后取消自增,保存,再加回自增,这也是自增段还原为1 的方法。

3、LAST_INSERT_ID

一是不带参数:LAST_INSERT_ID(),这种方法和AUTO_INCREMENT属性一起使用,当往带有‘AUTO_INCREMENT’属性字段的表中新增记录时,LAST_INSERT_ID()即返回该字段的值,大家可试下(我已经验证过);

二是带有表达式:如上面介绍的LAST_INSERT_ID(value+1),它返回的是表达式的值,即‘value+1’;

使用方式:

UPDATE ticket_mutex SET value=LAST_INSERT_ID(value+1) WHERE name='USER';

SELECT LAST_INSERT_ID();

UPDATE ticket_mutex SET value=LAST_INSERT_ID(value+1) WHERE name='POST';

SELECT LAST_INSERT_ID();

一般情况下获取刚插入的数据的id,使用select max(id) from table 是可以的。但在多线程情况下,就不行了。在多用户交替插入数据的情况下max(id)显然不能用。这就该使用LAST_INSERT_ID了,因为LAST_INSERT_ID是基于Connection的,只要每个线程都使用独立的Connection对象,LAST_INSERT_ID函数将返回该Connection对AUTO_INCREMENT列最新的insert
or update操作生成的第一个record的ID。LAST_INSERT_ID是基于单个connection的, 不可能被其它的客户端连接改变。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql