WEB开发网
开发学院数据库MySQL 在MySQL数据库中使用C执行SQL语句 阅读

在MySQL数据库中使用C执行SQL语句

 2007-04-26 15:48:20 来源:WEB开发网   
核心提示: 正如预期,插入的行数为1,在MySQL数据库中使用C执行SQL语句(2),现在,我们更改代码,报告受影响的行数却为0,这是因为由于效率原因优化删除整个表,所以 'insert' 部分被替换成: mysql_errno(&my_connection), mysql_error(&my_connectio

 
正如预期,插入的行数为1。

现在,我们更改代码,所以 'insert' 部分被替换成:

mysql_errno(&my_connection), mysql_error(&my_connection));
       }
       }
       res = mysql_query(&my_connection, "UPDATE children SET AGE = 4
       WHERE fname = 'Ann'");
       if (!res) {
       printf("Updated %lu rows\n",
       (unsigned long)mysql_affected_rows(&my_connection));
       } else {
       fprintf(stderr, "Update error %d: %s\n",
       mysql_errno(&my_connection),
       mysql_error(&my_connection));
       }
      
 现在假设子表中有的数据,如下:

childno fname age
1

2

3

4

5

6

7

8

9

10

11

Jenny

Andrew

Gavin

Duncan

Emma

Alex

Adrian

Ann

Ann

Ann

Ann

14

10

4

2

0

11

5

3

4

3

4

 
如果我们执行update1,希望报告的受影响行数为4,但是实际上程序报告2,因为它仅必须更改2行,虽然WHERE子句标识了4行。如果想让mysql_affected_rows报告的结果为4这可能是熟悉其它数据库的人所期望的),则需要记住将CLIENT_FOUND_ROWS标志传递到mysql_real_connect,在 update2.c中的程序如下:

if (mysql_real_connect(&my_connection, "localhost",
       "rick", "bar", "rick", 0, NULL, CLIENT_FOUND_ROWS)) {
      
 如果我们在数据库中复位数据,然后运行带有这种修改的程序,则它报告的行数为4。

函数mysql_affected_rows还有最后一个奇怪之处,它发生在从数据库中删除数据时。如果使用WHERE子句,则mysql_affected_rows将按预期返回删除行数。但是,如果没有WHERE子句,则删除所有行,报告受影响的行数却为0。这是因为由于效率原因优化删除整个表。这种行为不受CLIENT_FOUND_ROWS选项标志的影响。

上一页  1 2 

Tags:MySQL 数据库 使用

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接