C++执行完Mysql插入语句获取插入数据的主键

在MySQL数据库中,表的主键是每条数据的唯一标识,一般都设为自动增长,在执行插入语句时不用显式说明主键的值。


但在一些情况下,比如两个表之间形成主键和外键的关联,父表插入一条数据后,子表要相应地插入几条数据,这就要求子表要执行插入语句时必须知道父表中刚插入数据对应的主键ID,该怎么办呢?


答案就是调用mysql.h中的一个函数:my_ulonglong mysql_insert_id(MYSQL* mysql);

该函数返回给定的mysql中上一步 INSERT 查询中产生的 AUTO_INCREMENT 的 ID 号。


举例:两个表T1和T2结构如下,主键都是ID,T2表中t1id字段与T1主键ID对应


T1表:

ID

name


T2表:


ID

t1id

age



现在比如有条数据:小李18岁。往数据库插入时的操作如下:

MYSQL* sql = new MYSQL;
mysql_init(sql);
mysql_real_connect( sql , "127.0.0.1" , "root" , "123456" , " mydb" , 3306 , NULL , 0 );
string cmd = "insert into T1 values( NULL , '小李' );";
mysql_real_query( sql , cmd.c_str() , cmd.length() );
int x = mysql_insert_id(sql);//x存储了上一条插入数据的主键ID,即T1表中name为小李这一项的ID
stringstream ss;
string t1id;
ss << x;
ss >> t1id;
cmd = "insert into T2 valuse( NULL , " + t1id + " , 18 );";
mysql_real_query( sql , cmd.c_str() , cmd.length() );


这样就实现了两个表中主键和外键数据同时插入的操作



你可能感兴趣的:(C++,mysql,数据库,关联,主外键)