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

讨论了在多线程环境中使用mysql_insert_id()获取最新插入ID的安全性。虽然回答表明在同一个连接内是安全的,但建议使用SQL的LAST_INSERT_ID()函数以避免整数溢出问题,特别是在bigint字段情况下。
摘要由CSDN通过智能技术生成

请问用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()。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值