N0.7:mysql全操作与解析

yum 安装

  1. #yum install mysql-server
  2. $sudo /etc/init.d/mysqld start
  3. $mysql -uroot

 

1、下载mysql的二进制包

首先到 http://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-max-5.0.27-linux-i686-glibc23.tar.gz/from/pick 下载linux non RPM package  --max
选择一个镜像下载(默认情况下下载到Desktop),文件名为mysql-max-5.0.27-linux-i686-glibc23.tar.gz

2、安装mysql

解压mysql文件包
$cd Desktop
$tar xzvf mysql-max-5.0.27-linux-i686-glibc23.tar.gz

解压得到文件夹mysql-.....
将该文件夹移到你想放的路径,如/usr/local

$mv mysql-.... /usr/local

如果你嫌名字太长,可以改名

$cd /usr/local
$mv mysql-..... mysql

下面进入mysql目录,进行配置

$cd mysql
$./configure --prefix=/usr/local       //---/usr/local就是你想安装的路径

调用/sbin目录下的两个函数groupadd , useradd 添加用户组和用户名

$/sbin/groupadd mysql        //add group
$/sbin/useradd -g mysql mysql        //向 mysql 组中添加 mysql 用户

$scripts/mysql_install_db --user=mysql

此处显示错误信息:
Neither host 'zhu.sdut.edu' nor 'localhost' could be looked up with
./bin/resolveip
Please configure the 'hostname' command to return a correct hostname.
If you want to solve this at a later stage, restart this script with
the --force option

解决办法:
cd /etc
vim hosts
将::1改为127.0.0.1 (这里不是自己的IP,要不是这里出了错根本就不会在安装时耗时间)

[root@zhu etc]# cd /usr/local/mysql
[root@zhu mysql]# scripts/mysql_install_db --user=mysql


3、启动 登陆 mysql
$bin/mysqld_safe --user=mysql &
其中&是命令结束符,作用是将一个长时间运行的程序放入后台,我们再利用这个终端作其他事情
$bin/mysql -uroot  (-p"PASSWORD")              //登录

若显示 mysql> 则表示安装成功


4.查看mysql端口是否已运行
$netstat -nat
若显示    tcp 0 00.0.0.0 3306 0.0.0.0 * List  则表明mysql端口已打开

也可以使用查看端口进程命令
$ps -A


5、修改mysql的密码和设置环境变量
接下来说一下修改密码(添加密码),和设置环境变量

1)修改密码
  a)        用mysql的命令mysqladmin修改密码:
$bin/mysqladmin -uroot password '新密码'

如果原来有密码,则用下面的语句:
$bin/mysqladmin -uroot -p原来密码   password '新密码'

  b)        也可以进入Mysql后使用mysql命令修改密码
update user set password='123' where user='root' and host='localhost';
来添加或修改密码的


2)增加环境变量
在这里我们每次调用mysql的命令都需要找到其位置,为了在任何位置都能直接输入命令就可执行启动mysql或登录mysql

设置PATH的环境变量
[root@zhu local]# export PATH=$PATH:/usr/local/mysql/bin

查看是否将/home/zhu/bin:/usr/local/mysql/bin添加到环境变量中:
[root@zhu local]# echo $PATH

查看环境变量的值,可通过语句:
    $echo $变量名
如这里查看PATH的值(变量前要加符号$)
    $echo $PATH



6.linux 下 mysql 测试程序


mysql_init()
调用任何MySQL函数之前,需要在程序中调用该函数,它将初始化MySQL所需的某些全局变量。

mysql_real_connect()
尝试与运行在主机上的MySQL数据库引擎建立连接。在你能够执行需要有效MySQL连接句柄结构的任何其他API函数之前,mysql_real_connect()必须成功完成。

mysql_query()
执行指定为“以Null终结的字符串”的SQL查询。“以Null终结的字符串”的意思是字符串必须包含1条SQL语句,而且不应为语句添加终结分号(‘;’)或“/g”,而在mysql中每条语句都要有终结分号(‘;’)来表示一条语句的结束。

mysql_store_result()
对于成功检索了数据的每个查询(SELECT、SHOW、DESCRIBE、EXPLAIN、CHECK TABLE等),必须调用mysql_store_result()或mysql_use_result()。对于其他查询,不需要调用mysql_store_result()或mysql_use_result(),但是如果在任何情况下均调用了mysql_store_result(),它也不会导致任何伤害或性能降低


mysql_fetch_row()
检索结果集的下一行,如果是第一次检索则是检索第一行。当一个操作完成后保存该操作的结果,然后分行显示结果的内容,用的就是这个语句。



7. Linux下调试mysql:::

[root@zhu zhu]#  gcc -g mysql.c -I /usr/local/mysql/include/ -L /usr/local/mysql/lib -lmysqlclient -o mysql  -lz -lm
成功


因为mysql库文件不属于标准库,需要在编译时手工指定程序中使用的头文件
各参数意义:
-I:指定头文件 的位置/usr/local/mysql/include/
-L:指定附加库的位置/usr/local/mysql/lib
-lmysqlclient:链接mysql的客户端libmysqlclient.so文件,文件的前缀和后缀都是默认的。
-lz:优化编译
-lm:连接数据库



缺少选项-lm 时
# gcc -g mysql.c -I /usr/local/mysql/include/ -L /usr/local/mysql/lib -lmysqlclient -o mysql  -lz

错误信息如下:

/usr/local/mysql/lib/libmysqlclient.a(libtaocrypt_la-dh.o): In function `TaoCrypt::(anonymous namespace)::DiscreteLogWorkFactor(unsigned int)':
dh.cpp:(.text+0x8c): undefined reference to `pow'
dh.cpp:(.text+0xa6): undefined reference to `log'
dh.cpp:(.text+0xae): undefined reference to `pow'
/usr/local/mysql/lib/libmyibtaocrypt_la-dh.o): In function `TaoCrypt::DH::GenerateKeyPsqlclient.a(lair(TaoCrypt::RandomNumberGenerator&, unsigned char*, unsigned char*)':
dh.cpp:(.text+0x2d1): undefined reference to `pow'
dh.cpp:(.text+0x2ee): undefined reference to `log'
dh.cpp:(.text+0x2f6): undefined reference to `pow'
/usr/local/mysql/lib/libmysqlclient.a(libtaocrypt_la-dh.o): In function `TaoCrypt::DH::GeneratePrivate(TaoCrypt::RandomNumberGenerator&, unsigned char*)':
dh.cpp:(.text+0x488): undefined reference to `pow'
dh.cpp:(.text+0x4a9): undefined reference to `log'
dh.cpp:(.text+0x4b1): undefined reference to `pow'
collect2: ld 返回 1



缺少选项-lz 时
# gcc -g mysql.c -I /usr/local/mysql/include/ -L /usr/local/mysql/lib -lmysqlclient -o mysql  -lm

错误信息如下:

/usr/local/mysql/lib/libmysqlclient.a(my_compress.o): In function `my_compress_alloc':
my_compress.c:(.text+0xc5): undefined reference to `compress'
/usr/local/mysql/lib/libmysqlclient.a(my_compress.o): In function `my_uncompress':
my_compress.c:(.text+0x14c): undefined reference to `uncompress'
collect2: ld 返回 1



缺少选项-lmysqlclient
[root@zhu zhu]#  gcc -g mysql.c -I /usr/local/mysql/include/ -L /usr/local/mysql/lib -o mysql  -lz -lm

错误信息如下:

/tmp/ccO70ENe.o: In function `main':
/home/zhu/compress/mysql_linux_Num2/test.c:12: undefined reference to `mysql_init'
/home/zhu/compress/mysql_linux_Num2/test.c:14: undefined reference to `mysql_real_connect'
/home/zhu/compress/mysql_linux_Num2/test.c:16: undefined reference to `mysql_error'
/home/zhu/compress/mysql_linux_Num2/test.c:20: undefined reference to `mysql_query'
/home/zhu/compress/mysql_linux_Num2/test.c:22: undefined reference to `mysql_query'
/home/zhu/compress/mysql_linux_Num2/test.c:24: undefined reference to `mysql_real_connect'
/home/zhu/compress/mysql_linux_Num2/test.c:26: undefined reference to `mysql_error'
/home/zhu/compress/mysql_linux_Num2/test.c:33: undefined reference to `mysql_query'
/home/zhu/compress/mysql_linux_Num2/test.c:34: undefined reference to `mysql_query'
/home/zhu/compress/mysql_linux_Num2/test.c:35: undefined reference to `mysql_query'
/home/zhu/compress/mysql_linux_Num2/test.c:36: undefined reference to `mysql_query'
/home/zhu/compress/mysql_linux_Num2/test.c:37: undefined reference to `mysql_query'
/home/zhu/compress/mysql_linux_Num2/test.c:38: undefined reference to `mysql_store_result'
/home/zhu/compress/mysql_linux_Num2/test.c:39: undefined reference to `mysql_fetch_row'
/home/zhu/compress/mysql_linux_Num2/test.c:46: undefined reference to `mysql_query'




错误1:
    程序中有游离的 ‘/200’
解决:
    程序中有的标点符号是在中文件状态下输入的,将其改为在英文状态下输入


8. 操作实例


//mysql_linux_Num2
//mysql基本操作
//朱昌志
//2007-3-2
#include <stdio.h>
#include "/usr/local/mysql/include/my_global.h"
#include "/usr/local/mysql/include/mysql.h"
typedef struct _3D_POINT
{
float x,y,z;
}_3D_POINT;
 
int ReadData(int Point_Num,_3D_POINT point[111])
{
    Point_Num=0;
    int fscanf_ret=0;
    float temppoint[3];
 
    FILE *fp;
    char * filename="/home/zhu/compress/mysql_linux_Num2/1.txt";                           ///使用‘/‘而非‘//‘
    if ((fp=fopen(filename,"r"))==NULL)
        printf("can't open the file!");
    else
    {
        while (!feof(fp))
        {    
            fscanf_ret=fscanf(fp,"%f %f %f",&temppoint[0],&temppoint[1],&temppoint[2]);
            if (fscanf_ret==0||fscanf_ret==EOF)  
                break;
            point[Point_Num].x=temppoint[0];
            point[Point_Num].y=temppoint[1];
            point[Point_Num].z=temppoint[2];
            Point_Num++;
        }
    }
    return Point_Num;
}
 
void DatabaseOperation(int Point_Num,_3D_POINT point[111])
{
 
    float a,b,c;
    //char *sql=new char[50];
    char sql[200];                                                        
    int pointnum2=0;
 
    MYSQL mysql;
    MYSQL_ROW row;
    MYSQL_RES *result;
    mysql_init (&mysql);
    //连接MYSQL数据库
    if(!(mysql_real_connect(&mysql,"localhost","root",NULL,"mysql",0,NULL,0)))
    {
        fprintf(stderr, "Failed to connect to database: Error: %s/n",
            mysql_error(&mysql));
    }
    //创建数据库example
    mysql_query(&mysql,"create database example");
    //创建新用户
    mysql_query(&mysql,"grant all on example.* to zhu@'localhost' identified by '123'");
    //连接example数据库
    if(!(mysql_real_connect(&mysql,"localhost","zhu","123","example",0,NULL,0)))
    {
        fprintf(stderr, "Failed to connect to database: Error: %s/n",
            mysql_error(&mysql));
    }
    else
    {
        //创建一个表并将点插入表中
        int j=0;
        mysql_query(&mysql,"create table point( point_x float /* unique*/ ,point_y float,point_z float)");
        for (j;j<Point_Num;j++)                                         //不能在‘for’ 循环内部初始化
        {
            a=point[j].x;
            b=point[j].y;
            c=point[j].z;
            sprintf(sql,"insert into point values(%f,%f,%f)",a,b,c);
            mysql_query(&mysql,sql);    
        }
        //输出表中点的个数
        mysql_query(&mysql,"select count(point_x) from point");
        result=mysql_store_result(&mysql);
        if((row=mysql_fetch_row(result)))
        {
            printf("排序前点的个数==>%s/n",row[0]);    //因为row是MYSQL_ROW类型的,是字符型,所以此处是%s
        }
        //输出表中点的数据
        mysql_query(&mysql,"select * from point");
        result=mysql_store_result(&mysql);
        printf("排序前表中的数据==>/n");
        while((row=mysql_fetch_row(result)))
        {
            printf("%s %s %s/n",row[0],row[1],row[2]);
        }
    }
    //按升序选择表中数据
    mysql_query(&mysql,"select distinct * from point order by point_x asc");
    result=mysql_store_result(&mysql);
    //输出表中的数据
    FILE *fp;
    char *filename="/home/zhu/compress/mysql_linux_Num2/2.txt";
    if ((fp=fopen(filename,"w"))==NULL)
    {
        printf("cant open the file!/n");
    }
    else
    {
        printf("/n排序后表中的数据==>/n");
        while ((row=mysql_fetch_row(result)))
        {
            fprintf(fp,"%s %s %s/n",row[0],row[1],row[2]);
            printf("%s %s %s/n",row[0],row[1],row[2]);
            pointnum2++;
        }
        printf("/n排序后点的个数是==>%d/n",pointnum2);
    }
 
    //mysql_query(&mysql,"DAY()");
    //result=mysql_store_result(&mysql);
    //row=mysql_fetch_row(result);
    //printf("%d",row[0]);


    //创建视图
    printf("/n输出新建视图myview中的内容==>/n");
    mysql_query(&mysql,"create view myview (point_x,point_y,point_z) as select point_x,point_y,point_z from point where             point_x>'31'");
    result=mysql_store_result(&mysql);
    mysql_query(&mysql,"select * from myview  order by point_x");
    result=mysql_store_result(&mysql);
    while((row=mysql_fetch_row(result)))
        {
            printf("%s %s %s/n",row[0],row[1],row[2]);
        }

    //连接多个数据表

    printf("/n连接point和temp_point两个表将他们的内容同时输出内容如下/n");
    mysql_query(&mysql,"create table temp_point( point_x float /* unique*/ ,point_y float,point_z float)");
            mysql_query(&mysql,"insert into point values(1.0,2.0,3.0)");    
          mysql_query(&mysql,"insert into point values(4.0,5.0,6.0)");    
          mysql_query(&mysql,"insert into point values(7.0,8.0,9.0)");    
    mysql_query(&mysql,"select * from point  union select * from temp_point  order by point_x");
    result=mysql_store_result(&mysql);
    while((row=mysql_fetch_row(result)))
        {
            printf("%s %s %s/n",row[0],row[1],row[2]);
        }

 
    //删除表中数据和表
    mysql_query(&mysql,"delete from point");
    mysql_query(&mysql,"drop table point");
   mysql_query(&mysql,"drop database example");
}
 
int main()
{    
    int Point_Num=0;
 
    _3D_POINT point[111];
 
    Point_Num=ReadData(Point_Num,point);//从文件中读点并返回点的个数
 
    DatabaseOperation(Point_Num,point);//数据库相关操作
 
 
    return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值