如何获得当前自增ID

nianzhang747 2009-08-11 04:43:18
create table的时候id主键是自增的
当对该表进行多次删除与插入数据的时候id会出现不连续的情况

那么当我把表delete from table的时候

如何获得当前的id值
...全文
330 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuyuask 2011-08-30
  • 打赏
  • 举报
回复
请问解决办法是什么?因为我现在也遇到这个问题
nianzhang747 2009-08-13
  • 打赏
  • 举报
回复
谢谢诶 wsh 终于解决了!
vinsonshen 2009-08-13
  • 打赏
  • 举报
回复
其实就这样:

select auto_increment from information_schema.tables where table_schema='库名' and table_name='表名'
nianzhang747 2009-08-13
  • 打赏
  • 举报
回复
show table status where Name='cv_basic';

怎么从这个得出的结果集获取auto_increment 字段?
nianzhang747 2009-08-13
  • 打赏
  • 举报
回复
show table status where Name='cv_basic';

怎么从这个得出的结果集获取auto_increment 字段?
nianzhang747 2009-08-13
  • 打赏
  • 举报
回复
show table status where Name='cv_basic';

怎么从这个得出的结果集获取auto_increment 字段?
懒得去死 2009-08-12
  • 打赏
  • 举报
回复
与引擎没有关系! 直接从数据字典里面取吧。
nianzhang747 2009-08-12
  • 打赏
  • 举报
回复
这就是问题所在了
我就想得到最后一条插入记录的ID
应该怎么得到 加入出现上面的情况!(对行插入还是不确定的)
vinsonshen 2009-08-12
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 nianzhang747 的回复:]
...
INSERT INTO animals (grp,name) VALUES
    ('mammal','dog'),('mammal','cat'),
    ('bird','penguin'),('fish','lax'),('mammal','whale'),
    ('bird','ostrich');

SELECT * FROM animals ;

select last_insert_id();
你说这个是多少?
[/Quote]
这里的last_insert_id()就是插入('mammal','dog')这个值时的ID值,而非('bird','ostrich')插入时的值。
因为对于多行插入,last_insert_id()返回的是第一个插入记录的auto_increment的值。
nianzhang747 2009-08-12
  • 打赏
  • 举报
回复
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');
INSERT INTO animals (grp,name) VALUES
('mammal','dog'),('mammal','cat'),
('bird','penguin'),('fish','lax'),('mammal','whale'),
('bird','ostrich');
INSERT INTO animals (grp,name) VALUES
('mammal','dog'),('mammal','cat'),
('bird','penguin'),('fish','lax'),('mammal','whale'),
('bird','ostrich');

SELECT * FROM animals ;

select last_insert_id();
你说这个是多少?
vinsonshen 2009-08-12
  • 打赏
  • 举报
回复
select last_insert_id()
nianzhang747 2009-08-12
  • 打赏
  • 举报
回复
create table tb(id int(5) unsigned not null auto_increment,
name varchar(60) not null,
primary key(id)
)
default char set=utf8
engine=InnoDB;
insert into tb values(null,"afd");
insert into tb values(null,"afdsa");
insert into tb values(null,"afdsa");
insert into tb values(null,"afdsa");
select * from tb;
delete from tb where id<3;
insert into tb values(null,"afdsa");
insert into tb values(null,"afdsa");
delete from tb;
insert into tb values(null,"afdsa");
类似这种情况这个最后插入数据的ID怎么获得?请继续帮忙把sql语句写出来
yangxiao_jiang 2009-08-12
  • 打赏
  • 举报
回复
delete的话,用触发器能得到ID,其他的方法不知道。
lonelyriver 2009-08-11
  • 打赏
  • 举报
回复
楼上的回答很好
SQL77 2009-08-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 josy 的回复:]
show table status where Name ='TableName'

结果集里列名为AUTO_INCREMENT的值
[/Quote]
树哥也来这里了,嘻嘻
百年树人 2009-08-11
  • 打赏
  • 举报
回复
show table status where Name ='TableName'

结果集里列名为AUTO_INCREMENT的值
SQL77 2009-08-11
  • 打赏
  • 举报
回复
IDENT_CURRENT 类似于 Microsoft® SQL Server™ 2000 标识函数 SCOPE_IDENTITY 和 @@IDENTITY。这三个函数都返回最后生成的标识值。但是,它们在定义"最后"的作用域和会话上不同。

IDENT_CURRENT 返回为任何会话和任何作用域中的特定表最后生成的标识值。


@@IDENTITY 返回为当前会话的所有作用域中的任何表最后生成的标识值。


SCOPE_IDENTITY 返回为当前会话和当前作用域中的任何表最后生成的标识值。
vinsonshen 2009-08-11
  • 打赏
  • 举报
回复
innodb 引擎这个值是保存在内存里的,下次重新启动时,会对表取max来取得该自增值的。
myisam引擎,这个值是保存在表定义文件里的,所以,每次重新启动都是从表定义文件里面取。

清楚这2种本质的情况,相信你就知道你的上面所说的值应该怎么取了。

56,875

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧