MySQL基础教程
01、MySQLMariaDB 基础教程
02、MySQL 简介
03、MySQL MariaDB 安装
04、MySQL 管理
05、MySQL 日常管理
06、MySQL PHP 语法
07、MySQL 创建连接
08、MySQL 获取数据库列表
09、MySQL 创建数据库
10、MySQL 删除数据库
11、MySQL 选择数据库
12、MySQL 数据类型
13、MySQL 列出数据表
14、MySQL 创建数据表
15、MySQL 删除表
16、MySQL 插入数据
17、MySQL 获取插入数据的 ID
18、MySQL SELECT FROM 查询数据
19、MySQL WHERE 子句有条件的查询数据
20、MySQL UPDATE 更新数据
21、MySQL DELETE FROM 语句删除数据
22、MySQL 返回删改查受影响的行数
23、MySQL LIKE 子句模糊查询数据
24、MySQL UNION 操作符查询多张表
25、MySQL ORDER BY 排序
26、MySQL GROUP BY 分组查询数据
27、MySQL JOIN 进行多表查询
28、MySQL NULL 值处理
29、MySQL REGEXP 子句正则表达式查询
30、MySQL 数据库事务
31、MySQL ALTER 命令
32、MySQL 索引
33、CREATE TEMPORARY TABLE 创建临时表
34、MySQL DROP TABLE 删除临时表
35、MySQL INSERT INTO SELECT 复制表
36、MySQL 获取服务器元数据
37、MySQL 自增序列 AUTO_INCREMENT
38、MySQL 处理重复数据
39、MySQL 安全及防止 SQL 注入攻击
40、MySQL 导出数据
41、MySQL 导入数据
本文档使用 MrDoc 发布
-
+
首页
17、MySQL 获取插入数据的 ID
在MySQL 插入数据 我们已经学会了如何往一张表中插入数据,但要如何获取插入数据的 id 值呢 ? 不要疑惑,不然会长皱纹,MySQL 提供了 `LAST_INSERT_ID()` 函数用于获取上一次插入数据的 ID 我们可以使用下面的 SQL 命令获取上一次插入数据的 ID; ```python SELECT LAST_INSERT_ID(); ``` ### **准备范例数据** ------------ 可以在mysql> 命令行中运行以下语句填充范例数据 ```python DROP TABLE IF EXISTS tbl_language; CREATE TABLE IF NOT EXISTS tbl_language( id INT UNSIGNED AUTO_INCREMENT, name VARCHAR(64) NOT NULL, url VARCHAR(128) NOT NULL, founded_at DATE, PRIMARY KEY ( id ) )ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ``` `INSERT INTO tbl_language (name,url,founded_at) VALUES (‘Ruby’,’https://www.ruby-lang.org/’,’1996-12-25′);` ### **通过命令提示窗口获取插入数据的 ID** ------------ 可以在 mysql> 命令提示窗口中执行 `INSERT INTO` SQL 语句向某个表中插入数据 然后使用 `SELECT LAST_INSERT_ID();` 命令获取上一次插入数据的 ID 比如下面的代码使用 `INSERT INTO` 向表 `tbl_language` 中插入一条数据 ```python MariaDB [souyunku]> use souyunku; Database changed MariaDB [souyunku]>` INSERT INTO tbl_language (name,url,founded_at) VALUES ('Python','https://ddkk.com','1991-2-20'); Query OK, 1 row affected (0.01 sec) MariaDB [souyunku]> SELECT LAST_INSERT_ID(); +------------------+ | LAST_INSERT_ID() | +------------------+ | 1 | +------------------+ 1 row in set (0.00 sec) MariaDB [souyunku]> SELECT * FROM tbl_language; +----+--------+---------------------+------------+ | id | name | url | founded_at | +----+--------+---------------------+------------+ | 1 | Python | https://baidu.com | 1991-02-20 | +----+--------+---------------------+------------+ 1 row in set (0.00 sec) MariaDB [souyunku]> SELECT LAST_INSERT_ID(); +------------------+ | LAST_INSERT_ID() | +------------------+ | 1 | +------------------+ 1 row in set (0.00 sec) MariaDB [souyunku]> ``` 可以看到 `SELECT LAST_INSERT_ID();` 可以调用多次,返回的都是上一次的 ID 如果我们先插入两条数据,然后在运行 `SELECT LAST_INSERT_ID();` 呢 ```python MariaDB [souyunku]>` INSERT INTO tbl_language (name,url,founded_at) VALUES ('PHP','http://www.php.net','1994-1-1'); Query OK, 1 row affected (0.01 sec) MariaDB [souyunku]>` INSERT INTO tbl_language (name,url,founded_at) VALUES ('Ruby','https://www.ruby-lang.org/','1996-12-25'); Query OK, 1 row affected (0.01 sec) MariaDB [souyunku]> SELECT LAST_INSERT_ID(); +------------------+ | LAST_INSERT_ID() | +------------------+ | 3 | +------------------+ 1 row in set (0.00 sec) MariaDB [souyunku]> SELECT * FROM tbl_language; +----+--------+----------------------------+------------+ | id | name | url | founded_at | +----+--------+----------------------------+------------+ | 1 | Python | https://baidu.com | 1991-02-20 | | 2 | PHP | http://www.php.net | 1994-01-01 | | 3 | Ruby | https://www.ruby-lang.org/ | 1996-12-25 | +----+--------+----------------------------+------------+ 3 rows in set (0.00 sec) ``` 所以,`LAST_INSERT_ID()` 真的是获取上一条插入数据的 ID,如果连续插入两条数据,再获取,那么第一条插入的 ID 就获取不到了 ### **PHP 脚本获取插入数据的 ID** ------------ PHP中可以使用 `PDO::lastInsertId()` 函数获取插入数据的 ID,这个要在 `PDO::exec()` 运行插入数据后立刻调用 `PDO::lastInsertId()` 函数原型 ```python string PDO::lastInsertId ([ string $name = NULL ] ) ``` 返回最后插入行的 id,或者是一个序列对象最后的值,取决于底层的驱动 **范例** 下面的PHP 代码演示了如何用 PDO_MySQL 往表 tbl_language 中插入数据 ```php <?php $sql= "INSERT INTO tbl_language (name,url,founded_at) VALUES ('Kotlin','http://kotlinlang.org/','2016-02-17');"; $dbh = new PDO('mysql:host=127.0.0.1;dbname=souyunku', 'root', ''); $rs = $dbh->exec($sql); if ( $rs > 0 ) { echo "成功往 souyunku 数据库中的表 tbl_language 中插入数据\n"; $id = $dbh->lastInsertId(); echo "插入数据的ID值为:",$id,"\n"; } else { echo "插入数据失败:",$dbh->errorInfo()[2], "\n"; ``` 运行以上 PHP 代码,输出结果如下 ```php $ php main.php 成功往 souyunku 数据库中的表 tbl_language 中插入数据 插入数据的ID值为:4 ``` 可以在mysql> 中使用下面的 SQL 语句查看 PHP 执行的结果 ```php SELECT * FROM tbl_language; ``` 输出结果 ```php MariaDB [souyunku]>` SELECT * FROM tbl_language; +----+--------+----------------------------+------------+ | id | name | url | founded_at | +----+--------+----------------------------+------------+ | 1 | Python | https://baidu.com | 1991-02-20 | | 2 | PHP | http://www.php.net | 1994-01-01 | | 3 | Ruby | https://www.ruby-lang.org/ | 1996-12-25 | | 4 | Kotlin | http://kotlinlang.org/ | 2016-02-17 | +----+--------+----------------------------+------------+ 4 rows in set (0.00 sec) ```
李智
2025年3月17日 13:30
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码