Tho*_*ews 3 c++ mysql mysqldump prepared-statement
我正在使用MySQL和准备好的语句来插入BLOB记录(jpeg图像).执行准备好的语句后,我发出一个SELECT LAST_INSERT_ID()并返回0.
在我的代码中,我在执行命令之后放置一个断点,在MySQL命令(监视器)窗口中,我发出SELECT LAST_INSERT_ID()并返回零.
在MySQL命令(监视器)窗口中,我发出一个SQL语句来选择所有ID,最后一个(仅)插入的ID是1(一个).
我在用:
我的表格描述:
mysql> describe picture_image_data;
+---------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+------------------+------+-----+---------+----------------+
| ID_Image_Data | int(10) unsigned | NO | PRI | NULL | auto_increment |
| Image_Data | mediumblob | YES | | NULL | |
+---------------+------------------+------+-----+---------+----------------+
2 rows in set (0.19 sec)
Run Code Online (Sandbox Code Playgroud)
使用MySQL监视器的结果:
mysql> select ID_Image_Data
-> from picture_image_data;
+---------------+
| ID_Image_Data |
+---------------+
| 1 |
+---------------+
1 row in set (0.00 sec)
mysql> SELECT LAST_INSERT_ID();
+------------------+
| LAST_INSERT_ID() |
+------------------+
| 0 |
+------------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
准备好的声明:
INSERT INTO Picture_Image_Data
(ID_Image_Data, Image_Data)
VALUES
(?,
?);
Run Code Online (Sandbox Code Playgroud)
上面的结果显示ID_Image_Data字段为1,但LAST_INSERT_ID为零.该表是在执行此语句之前创建的,因此这是表中唯一的记录.
我将ID字段设置为零,将下一个字段设置为C++ std::istream *.根据MySQL手册页面LAST_INSERT_ID():
LAST_INSERT_ID()如果将行的AUTO_INCREMENT列设置为非"魔术"值(即,非NULL且不为0的值),则不会更改值.
由于预准备语句中的ID值为0,因此LAST_INSERT_ID()应返回1.
我是否需要为获取LAST_INSERT_ID做一个准备好的语句?
{搜索网络显示使用自定义MySQL API,但使用PHP和更进一步的评论说它需要另一个连接).
LAST_INSERT_ID仅适用于在auto_increment字段上创建的自动生成的主键.在您的情况下,看起来您显式提供了id,因此未设置最后一个插入ID.
这是明确的:
mysql> insert into test (id, name) VALUES (5, 'test 2');
Query OK, 1 row affected (0.00 sec)
mysql> SELECT LAST_INSERT_ID();
+------------------+
| LAST_INSERT_ID() |
+------------------+
| 0 |
+------------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
这是隐含的:
mysql> insert into test (name) values ('test');
Query OK, 1 row affected (0.00 sec)
mysql> SELECT LAST_INSERT_ID();
+------------------+
| LAST_INSERT_ID() |
+------------------+
| 3 |
+------------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)