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

mysql插入信息后并读取该信息(mysql_insert_id )

2010-04-01 10:53 267 查看
请问用mysql_insert_id 安全吗?

class表结构如下(id,className)其中id为自动增长类型的主键,className为varchar(255)字符串类型
id
className

student表结构如下(id,studentName)其中id不是自动增长类型的主键,studentName为varchr(255)字符串类型
id
student

我现在要连续插入一条数据,是这样的如下:
mysql_query ("insert into className
values(一班级')");
$id = mysql_insert_id();//获取刚刚插入的id
mysql_query ("insert
into studentName
values('张三')");

现在的问题是,mysql_insert_id();在多线程的时候,会不会获取别的页面的最后插入的id?这样就麻烦了。

回答一:

不会的
mysql_insert_id()只返回当前连接的AUTO_INCREMENT
最后产生的 ID
是以每个连接为基础在服务器端被维护的。它不可能被其它的客户端连接改变。

回答二:

它是一个单独的进程请求,所以安全!

回答三:

mysql_insert_id确实不太安全,不过不是因为线程而不安全。是因为mysql_insert_id返回的是一个int类型,如果数据库的自增字段是bigint,这个字段的数值就有可能超过int的最大值,导致结果的不正确。我是遇到过这个问题的。解决方法是利用SQL语句来获取id:SELECT
LAST_INSERT_ID()。

这个问题即使是在64位机器上也依然存在,除非bigint没用unsigned标志。因为php的int类型是用long来存储,long在32位机器是4bytes,在64位机器是8bytes。所以在32位必然存在这个问题,而在64位,因为php的int是有符号的,所以只有63个bits来存储数据。当bigint
unsigned的时候,就存在溢出的问题。

回答四:

解决方法是利用SQL语句来获取id:SELECT LAST_INSERT_ID()。

楼上的朋友,上面是您的方案,不知道
LAST_INSERT_ID()。
是php自己带的函数还是你自己写的函数,从表面上看是不是和
select max(id) from
tableName limit
1;相同呢?
如果相同的话,那您的方法也不实际啊?
必竟管理网站的不可能是一个人,这样如果多个用户操作的话,启不是会出错,

不好意思,这是我的个人意见,还请您指教!!!!!!!!!!!!!!

回答五:

LAST_INSERT_ID()是mysql提供的函数,不是PHP,也不是我提供的。

$rs=mysql_query('SELECT
LAST_INSERT_ID()');
var_dump(mysql_fetch_array($rs));

回答六:

8楼讲的不错.(指五)

LAST_INSERT_ID()是 MySQL 内部的 SQL
函数.在bigint下使用这个函数。

mysql手册中说SELECT last_insert_id()是多用户安全的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: