需求:比如说,用PHP做网页,MySQL作为数据库,网站上要创建一个用户,需要往数据表中插入一条数据,包含用户的主要信息,主键自增的UID,创建之后我要获取这个UID
解决办法:
1 | SELECT max(id) FROM user; |
但如果并发量大,可能获取到的数据不正确。
更好的解决办法
MySQL
1 | SELECT LAST_INSERT_ID(); |
MS-SQL(没有用过,从别人文章里抄的)
1 | select @@IDENTITY; |
在PHP中,这是PHP官方文档的内容
mysqli::$insert_id — 返回最后一条插入语句产生的自增 ID
下面是PHP给的Demo
面向对象风格
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <?php $mysqli = new mysqli("localhost", "my_user", "my_password", "world"); /* 检查连接 */ if (mysqli_connect_errno()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit(); } $mysqli->query("CREATE TABLE myCity LIKE City"); $query = "INSERT INTO myCity VALUES (NULL, 'Stuttgart', 'DEU', 'Stuttgart', 617000)"; $mysqli->query($query); printf ("New Record has id %d.\n", $mysqli->insert_id); /* 删除表 */ $mysqli->query("DROP TABLE myCity"); /* 关闭连接 */ $mysqli->close(); ?> |
过程化风格
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <?php $link = mysqli_connect("localhost", "my_user", "my_password", "world"); /* 检查连接 */ if (mysqli_connect_errno()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit(); } mysqli_query($link, "CREATE TABLE myCity LIKE City"); $query = "INSERT INTO myCity VALUES (NULL, 'Stuttgart', 'DEU', 'Stuttgart', 617000)"; mysqli_query($link, $query); printf ("New Record has id %d.\n", mysqli_insert_id($link)); /* 删除表 */ mysqli_query($link, "DROP TABLE myCity"); /* 关闭连接 */ mysqli_close($link); ?> |
输出的内容都会长这样:
1 | New Record has id 1. |
发表回复