仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1194|回复: 9
打印 上一主题 下一主题

[学习教程] MYSQL网站制作之在MySQL数据库中利用C实行SQL语句

[复制链接]
再见西城 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:45:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
“MySQL实际上是一个数据库家族,你可以从选择一个并将其配置成可以满足你的大多数情况,”开源顾问公司Ethiqa的总裁如此表示,“因此,你可以在开始的时候选择一个小巧的版本产品,以后再根据需要来对其进行性能或大小上的扩展。”mysql|数据|数据库|语句|实行与PostgreSQL类似,可以使用很多分歧的言语来会见MySQL,包含C、C++、Java和Perl。从ProfessionalLinuxProgramming中第5章有关MySQL的以下章节中,NeilMatthew和RichardStones利用细致的MySQLC接口向我们先容了怎样在MySQL数据库中实行SQL语句。他们将会商前往数据的语句,比方INSERT和不前往数据的语句,比方UPDATE和DELETE。然后,他们将编写从数据库检索数据的复杂程序。

实行SQL语句

如今,我们已有了一个毗连,而且晓得怎样处置毛病,是时分会商利用我们的数据库来作一些实践事情了。实行一切范例的SQL的主关头字是mysql_query:
  1. intmysql_query(MYSQL*connection,constchar*query)
复制代码

正如您所见,它十分复杂。它取一个指向毗连布局的指针和包括要实行的SQL的文本字符串;与命令行工具分歧,将不利用停止分号。乐成以后,前往0。在必要包括二进制数据的特别情形下,可使用相干的函数,mysql_real_query。固然出于本章的目标,我们仅必要会商mysql_query。

不前往数据的SQL语句

我们将先会商UPDATE、DELETE和INSERT语句。由于它们不前往数据,以是更容易于利用。

这里我们将先容的另外一个主要函数是反省受影响的行数的函数:
  1. my_ulonglongmysql_affected_rows(MYSQL*connection);
复制代码

大概关于这一函数的最不言而喻的事就是其非同平常的前往了局。因为可移植性缘故原由,这是一个特别的无标记范例。为了在printf中利用,倡议将其强迫转换成利用%lu格局标准的无标记长整数。这个函数前往受之前的UPDATE、INSERT或DELETE查询影响的行数,这些查询是利用mysql_query实行的。

一般关于mysql_函数,前往码0暗示没有行受影响;负数暗示实践了局,一般是受影响的行数。

如前所述,当利用mysql_affected_rows时大概呈现未希冀的了局。让我们先会商受INSERT语句影响的行数,它将按预期举行操纵。将以下代码增加到程序connect2.c中,而且称其为insert1.c:
  1. #include#include#include"mysql.h"intmain(intargc,char*argv[]){MYSQLmy_connection;intres;mysql_init(&my_connection);if(mysql_real_connect(&my_connection,"localhost","rick","bar","rick",0,NULL,0)){printf("Connectionsuccess
  2. ");res=mysql_query(&my_connection,"INSERTINTOchildren(fname,age),VALUES(Ann,3)");if(!res){printf("Inserted%lurows
  3. ",(unsignedlong)mysql_affected_rows(&my_connection));}else{fprintf(stderr,"Inserterror%d:s
  4. ",mysql_errno,(&my_connection),mysql_error(&my_connection));}mysql_close(&my_connection);}else{fprintf(stderr,"Connectionfailed
  5. ");if(mysql_errno(&my_connection)){fprintf(stderr,"Connectionerror%d:%s
  6. ",mysql_errno(&my_connection),mysql_error(&my_connection));}}returnEXIT_SUCCESS;}
复制代码

正如预期,拔出的行数为1。

如今,我们变动代码,以是insert部分被交换成:
  1. mysql_errno(&my_connection),mysql_error(&my_connection));}}res=mysql_query(&my_connection,"UPDATEchildrenSETAGE=4WHEREfname=Ann");if(!res){printf("Updated%lurows
  2. ",(unsignedlong)mysql_affected_rows(&my_connection));}else{fprintf(stderr,"Updateerror%d:%s
  3. ",mysql_errno(&my_connection),mysql_error(&my_connection));}
复制代码

如今假定子表中有的数据,以下:

childnofnameage12
3
4
5
6
7
8
9
10
11
JennyAndrew
Gavin
Duncan
Emma
Alex
Adrian
Ann
Ann
Ann
Ann
1410
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中的程序以下:
  1. 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]下一页

任何规模的组织都可能受益于外包服务,并在一个标准化和优化的平台上统一其数据库管理任务。基于其本身的特性,DBaaS提供了敏捷和高效的数据库服务,它可以支持多变的需求。
海妖 该用户已被删除
沙发
发表于 2015-1-17 16:20:28 | 只看该作者
另一个是把SQL语句写到服务器端,就是所谓的SP(存储过程);
只想知道 该用户已被删除
板凳
发表于 2015-1-20 20:11:03 | 只看该作者
我们学到了什么?思考问题的时候从表的角度来思考问
变相怪杰 该用户已被删除
地板
发表于 2015-1-29 20:15:49 | 只看该作者
一个是把SQL语句写到客户端,可以使用DataSet进行加工;
愤怒的大鸟 该用户已被删除
5#
发表于 2015-2-6 03:54:10 | 只看该作者
这一点很好的加强了profiler的功能。但是提到profiler提醒大家注意一点。windows2003要安装sp1补丁才能启动profiler。否则点击没有反应。
乐观 该用户已被删除
6#
发表于 2015-2-15 11:38:32 | 只看该作者
只能告诉你,学好数据库语言和原理,多见识几种数据库软件,比一棵树上吊死要好。
蒙在股里 该用户已被删除
7#
发表于 2015-3-4 11:29:54 | 只看该作者
但换公司用MSSQL2K感觉自己好像根本就不了解MSSQL。什么DTS触发器以前根本没用过。
活着的死人 该用户已被删除
8#
发表于 2015-3-11 19:04:25 | 只看该作者
无法深入到数据库系统层面去了解和探究
飘飘悠悠 该用户已被删除
9#
发表于 2015-3-19 08:53:25 | 只看该作者
我是一个ERP初学者,对于前台运用基本熟悉,但对于后台SQLServer的运用一点也不懂,特想学习下相关资料。至少懂得一些基本的运用。希望各位能给于建议,小弟再谢过!
谁可相欹 该用户已被删除
10#
发表于 2015-3-27 16:09:33 | 只看该作者
另一个是把SQL语句写到服务器端,就是所谓的SP(存储过程);
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-29 06:51

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表