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