MYSQL之LAST_INSERT_ID()语句

对于这样的一个数据库表格:
CREATE TABLE sig_class ( sig_class_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
sig_class_name VARCHAR(60) NOT NULL,
PRIMARY KEY (sig_class_id),
INDEX (sig_class_id),
INDEX (sig_class_name));
插入数据有一个微小但至关重要的方面,那就是AUTO_INCREMENT类型的列。它由MySQl自动分配ID。这一特性非常有用,特别是当你有许多用户的时候。
正如上表所示,sig_calss_id被设置为AUTO_INCREMENT类型。一旦你插入一行,代码如下所示:
insert into sig_class(sig_class_name)values("test1111");
你如何知道插入的sig_class_name被分配了什么数字呢?
若是执行一条select语句来搜索这个sig_class_name的名字,来确定sig_class_id,这样的话效率会很低,并且如果有两个相同名字的类型名,这将不能保证唯一性。或者,如果有多个用户快速地插入数据,那么可能在新操作和SELECT语句之间会有其他行被插入。因为发现一个AUTO_INCREMENT列的值是大家都面临的一个共同问题,所以MySQL以函数LAST_INSERT_ID()的形式专门提供了一个解决方案。无论何时MySQL向AUTO_INCREMENT列中插入数据,MySQL都会基于每个用户对最后分配的值进行跟踪。用户程序可以通过SELECT专门函数LAST_INSERT_ID()来发现该值,这个函数的作用有点像表中的虚拟列。

实例如下所示:


剖析:
每次插入一行,MySQL就分配一个新的id值并且跟踪它,使得你可以用LAST_INSERT_ID()来提取它。如果想通过实验查看返回的数字在本次会话中确实是唯一的,那么你可以打开另一个会话并插入另一行数据。然后在最初的会话中重新执行SELECT LAST_INSERT_ID();语句。你将看到数字并没有发生改变,这是因为该语句返回的数字是当前会话插入的最后一个数字。但是,如果执行SELECT*FROM sig_class,你将看到其他会话确实已插入数据了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值