免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1165 | 回复: 0
打印 上一主题 下一主题

《Linux程序设计》学习笔记08——MySQL [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-11 20:42 |只看该作者 |倒序浏览


  Normal
  0
  
  7.8 磅
  0
  2
  
  false
  false
  false
  
   
   
   
   
   
   
   
   
   
   
   
   
  
  MicrosoftInternetExplorer4



st1\:*{behavior:url(#ieooui) }
/* Style Definitions */
table.MsoNormalTable
        {mso-style-name:普通表格;
        mso-tstyle-rowband-size:0;
        mso-tstyle-colband-size:0;
        mso-style-noshow:yes;
        mso-style-parent:"";
        mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
        mso-para-margin:0cm;
        mso-para-margin-bottom:.0001pt;
        mso-pagination:widow-orphan;
        font-size:10.0pt;
        font-family:"Times New Roman";
        mso-fareast-font-family:"Times New Roman";
        mso-ansi-language:#0400;
        mso-fareast-language:#0400;
        mso-bidi-language:#0400;}
欢迎转载,请保留作者信息
bill@华中科技大学
http://billstone.cublog.cn
  
“ Just do one
thing,do it well! ”
两个最著名的开源RDBMS应用软件是PostgreSQL和MySQL。PostgreSQL能在任何情况下免费使用。MySQL在某些情况下需要收取许可费用。本书专注于MySQL,《Linux高级程序设计》对PostgreSQL有所涉及,同时你可以在
www.postgresql.org
上找到更多详细资料。

安装MySQL
一般情况下,在你安装的Linux套件中会有MySQL软件包。当你发现系统上没有安装MySQL时你就需要自己去手动安装了。安装方法一般分为两种:rpm软件包分发和源代码分发。对于如何使用rpm二进制软件分发方式安装MySQL,网上有篇
帖子
介绍了在RedHat 9上的详细安装步骤;对于源代码分发方式,你可以参照源代码目录中INSTALL_BINARY文件。
在MySQL的安装过程中,安装脚本会为你自动创建一个初始数据库。同样,你也能得到一个用于启动和停止服务器的init.d脚本(通常在/etc/rc.d/init.d目录中)mysqld或mysql。通常情况下,在特定Linux发行版上查找数据库文件最简单的方法就是,在init.d目录中找到这个脚本并查看它的内容。标准路径和定义位于脚本的开头,你可以很容易地看到文件都被放在哪里了。
你也可以使用chkconfig命令来设置MySQL服务器的运行方式。该命令提供了一种更简单的方式来设置一个服务的运行级别。比如说,为了设置MySQL服务器在运行级别3和4上运行,可以按下面命令设置:

  
  [billstone@ubuntu
  ~]$ chkconfig --add mysql         
  // 首先将mysql添加为chkconfig管理的服务
  [billstone@ubuntu
  ~]$ chkconfig --level 34 mysql on
                          // 在级别3和4上将mysql服务设置为开启状态(on)
  [billstone@ubuntu
  ~]$ chkconfig --level 01256 mysql off
                          // 在其他级别上将mysql服务设置为关闭状态(off)
  

安装之后,可以以root身份使用/etc/rc.d/init.d/mysql start命令来手动启动服务器。MySQL在安装过程中还会创建用户mysql,在默认情况下,MySQL服务器进程将以此用户的身份来运行。
当MySQL安装完成后,你可以使用下面的命令进入控制台

  
  [billstone@ubuntu
  ~]$ mysql -u root mysql
  

在控制台上,你可以输入\s获得关于MySQL服务器的信息;当然你也可以使用mysqladmin命令来查看服务器的信息。

  
  [billstone@ubuntu
  ~]$ mysqladmin -u root version
  

注意:MySQL的root用户和系统的root用户(超级用户)没有任何关联。对于Linux系统来说,除非绝对需要,否则使用root账号来登录MySQL是一个不好的习惯,所以你应该为日常使用添加一个普通用户。

管理MySQL
MySQL有一系列有用的工具程序来完成管理工作。
myisamchk命令:用来检查和修复使用默认MYISAM表格格式的任何数据表格,MYISAM表格格式由MySQL自身支持。
mysql命令:这是MySQL主要的也是唯一完全交互式的命令行工具。当然你也可以用重定向方式读入sql文件以非交互式模式来运行sql命令:

  
  [billstone@ubuntu
  ~]$ mysql -u rick –p bar foo
  

mysqladmin命令:可以快速进行MySQL数据库管理。可以完成创建数据库、删除数据库、更改密码和查看状态等操作。
mysqldump命令:可以以SQL命令集的形式把部分或整个数据库导出到一个单独文件中;同时该文件也能被重新导入MySQL或其他的SQL RDBMS。
mysqlimport命令:与mysqldump对应的一个工具。
如果你是MySQL管理员,就必须维护用户信息。从MySQL 3.22开始,可以在MySQL控制台中使用grant和revoke命令管理用户。详细情况请参照MySQL用户手册。
提示:MySQL有一个叫做MySQL GUI的图形工具。如果你实在不喜欢文本方式下的操作,可以选择使用这个图形工具。

使用C语言访问MySQL
C语言提供了一系列mysql例程来完成对mysql数据库的操作,下面是一个典型的连接例程:

  
  #include
  
  #include
  
  #include
  
   
  #include
  "mysql.h"
   
  int
  main()
  {
          MYSQL * pConn;
   
          pConn = mysql_init(NULL);
          assert(pConn != NULL);
   
          if(mysql_real_connect(pConn,
  "localhost", "rick1", "123", "foo",
  0, NULL, 0))
                  printf("Connection
  success!\n");
          else
                  printf("Connection
  fail!\n");
   
          mysql_close(pConn);
   
          return 0;
  }
  

在编译上面程序之前,需要在MySQL服务器上创建一个新的数据库foo,并且创建用户rick1,在MySQL客户端上命令如下

  
  mysql
  > grant ALL on foo.* to rick1@localhost identified by “123”
  

要使用C语言连接MySQL数据库,首先调用mysql_init函数初始化连接句柄,如果出错,返回NULL;调用mysql_read_connect创建实际连接,如果连接失败,返回NULL。
当完成连接后,通常在程序正常退出前,需要调用mysql_close关闭连接。
在上面的例程中,我们使用了assert断言来确保mysql接口调用后的有效性。实际上,为了获得更多的错误信息,我们应该使用mysql_errno和mysql_error函数。
当编译该例程时,你很有可能需要添加头文件路径和库文件路径,并且需要指定链接的库模块mysqlclient。在某些系统上,你可能还需要使用-lz选项来链接压缩库。
注意:当运行该例程时,一定要保证链接库文件libmysqlclient.so.16在有效的LIB路径(比如/usr/lib路径)上。
使用C语言接口操作MySQL数据库,实际上就是执行sql语句。实际编程中,我们使用mysql_query或者mysql_real_query执行sql语句。要获取sql语句的执行结果,我们使用mysql_store_result或者mysql_use_result函数,其中,前者一次性提取所有数据并将其存储在MYSQL_RES结构中,而后者则一次提取一行数据,同样存储在MYSQL_RES结构中。调用mysql_num_rows函数将得到结果集中的行数。在得到MYSQL_RES结构后,则循环调用mysql_fetch_row获取一行执行结果保存为MYSQL_ROW结构,要想提取列数据,只需对MYSQL_ROW结构进行下标操作,下面是一个典型例程:

  
  #include
  
  #include
  
  #include
  
   
  #include
  "mysql.h"
   
  MYSQL
  *pConn;
  MYSQL_RES
  *res_ptr;      // 执行结果集
  MYSQL_ROW
  sqlrow;      // 从执行结果集中获取的一行结果
   
  void
  display_row(){
          unsigned int count;
   
          count = 0;
          while(count
                  printf("%s ",
  sqlrow[count]);   // 从一行执行结果中读出列数据
                  count++;
          }
          printf("\n");
  }
   
  int
  main()
  {
          int res;
   
          pConn = mysql_init(NULL);
          assert(pConn != NULL);
   
          if(mysql_real_connect(pConn,
  "localhost", "rick1", "123", "foo",
  0, NULL, 0)){
                  printf("Connection
  success!\n");
                  res = mysql_query(pConn,
  "select * from children"); // 执行sql语句
                  if(!res){
                          res_ptr =
  mysql_store_result(pConn);  // 获取执行结果集
                          if(res_ptr){
                                 
  printf("Get %lu rows\n", (unsigned
  long)mysql_num_rows(res_ptr));
                                  while((sqlrow
  = mysql_fetch_row(res_ptr))){  // 从执行结果读取一行执行结果
                                         
  printf("Fetching data ...\n");
                                         
  display_row();
                                  }
                          }
                          mysql_free_result(res_ptr);   // 释放执行结果集
                  }
                  else
                          printf("Select
  error %s!\n", mysql_error(pConn));
          }
          else
                  printf("Connection
  fail!\n");
   
          mysql_close(pConn);
   
          return 0;
  }
  

在执行上述例程前,需要在foo数据库中完成children表的创建和数据插入操作。你可以选择直接在MySQL控制台上执行sql语句,也可以执行存储了sql语句的文件。定义如下,你可以多写入几行数据

  
  create
  table children(
          childno int(11) not null
  auto_increment,
          fname varchar(30),
          age int(11),
          primary key (childno)
  );
   
  insert
  into children values(1, 'Jenny', 17);
  insert
  into children values(2, 'Andrew', 13);
  


详细的MySQL编程接口可以自行查看手册。本章最后展示了CD唱片应用程序的完整代码。它详细地描述了如何设计MySQL数据库以及使用C语言接口来完成数据的存储和访问,为我们自己设计使用MySQL数据库带来了很大的帮助。
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/47687/showart_1993421.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP