zoukankan      html  css  js  c++  java
  • Linux Programming之MySQL

    实验环境:Ubuntu13.04

    在此之前有过一段使用MySQL数据库的经历,在Windows平台下使用GUI(当时是使用HeidiSQL和Workbench来管理数据库),并且有过使用Python中的mysqldb模块操作MySQL数据库。最近,在深入的学习Linux操作系统的管理,从鸟叔的2本书到Linux Shell编程,再到Linux下的C编程,沿途一路走来,学到不少新知识。这里带给大家Linux下使用C语言操作数据库的方法,我将从MySQL环境的搭建,MySQL命令的使用到使用C接口来操作MySQL等过程详细的介绍在Linux下管理MySQL数据库的方法,有需要的猿们可以一起学习。

    1. MySQL的安装与配置:

    在Ubuntu下安装MySQL方法很简单,使用如下命令:

    sudo apt-get install mysql-server

    安装的过程中系统会提示设置root密码,此过程可以跳过,但是建议在安装时提示设置root密码的时候自行设置,免得后面设置麻烦。安装结束之后,系统会启动mysql服务,可以使用命令去查看来验证mysql服务是否已经安装成功:

    ps -el | grep mysql

    如果mysql服务没有正常的运行,可以使用下面指令对mysql服务进行重启:

    sudo service mysql restart

    喜欢使用Workbench界面的,还需要安装Workbench:

    sudo apt-get install mysql-workbench

    Workbench的启动使用如下命令:

    mysql-workbench --log-level=debug3 --verbose

    2. MySQL命令行:

    我们使用root去登录MySQL,然后做相关的操作:

    mysql -u root -p

    在此,系统会提示输入密码,只需要输入之前设置的MySQL密码即可,然后程序会进入mysql命令行模式下,假设我们需要查看user信息,我们使用如下命令:

    use mysql
    SELECT host, user, password FROM user;

    MySQL会返回所有host,user和password等信息。其他比较复杂的操作,诸如添加数据库,添加表等和普通的数据操作命令一致,后面会以一个实例来说明。让我们赶快进入Linux下C操作MySQL的实践吧!

    3. 使用C语言管理MySQL数据库:

    首先,我们需要安装在Linux下操作MySQL多依赖的库,安装命令如下:

    sudo apt-get install libmysqlclient-dev

    安装了这个之后,我们编程所需要的头文件,库文件等就齐全了,让我们开始C编程之旅吧!

    首先,让我们准备一个我们用来折腾的空间,也就是准备一个折腾专属账户,一个折腾专属数据库和数据表等:

    #添加账户
    GRANT ALL ON *.* TO rick@localhost IDENTIFIED BY 'secret'
    q
    #使用新创建的rick账户登录
    mysql -u rick -p
    #创建数据库
    CREATE DATABASE foo;

    然后,我们使用一个sql文件插入数据表和测试数据:

    --
    -- Create the table children
    --
    CREATE TABLE children (
        childno int(11) NOT NULL auto_increment,
        fname varchar(30),
        age int(11),
        PRIMARY KEY (childno)
    );
    --
    -- Populate the table 'children'
    --
    INSERT INTO children(childno, fname, age) VALUES (1, 'Jenny', 21);
    INSERT INTO children(childno, fname, age) VALUES (2, 'Andrew', 17);
    INSERT INTO children(childno, fname, age) VALUES (3, 'Gavin', 8);
    INSERT INTO children(childno, fname, age) VALUES (4, 'Duncan', 6);
    INSERT INTO children(childno, fname, age) VALUES (5, 'Emma', 4);
    INSERT INTO children(childno, fname, age) VALUES (6, 'Alex', 15);
    INSERT INTO children(childno, fname, age) VALUES (7, 'Adrian', 9);

    将上述sql语句存为create_children.sql,然后使用下列命令导入MySQL数据库foo:

    mysql -u rick --password=secret foo
    . create_children.sql

    好了,写个demo进行测试吧:

    #include <stdlib.h>
    #include <stdio.h>
    
    #include "mysql.h"
    
    int main(int argc, char *argv[]) {
        MYSQL my_connection;
        int res;
    
        mysql_init(&my_connection);
        if (mysql_real_connect(&my_connection, "localhost",
                    "rick", "secret", "foo", 0, NULL, 0)) {
            printf("Connection success
    ");
            res = mysql_query(&my_connection, "INSERT INTO children(fname, age) VALUES('Ann', 3)");
            if (!res) {
                printf("Inserted %lu rows
    ",
                        (unsigned long)mysql_affected_rows(&my_connection));
            } else {
                fprintf(stderr, "Insert error %d: %s
    ", mysql_errno(&my_connection), mysql_error(&my_connection));
            }
    
            mysql_close(&my_connection);
        } else {
            fprintf(stderr, "Connection failed
    ");
            if (mysql_error(&my_connection)) {
                fprintf(stderr, "Connection error %d: %s
    ", mysql_errno(&my_connection), mysql_error(&my_connection));
            }
        }
        return EXIT_SUCCESS;
    }

    将上述代码保存为demo.c。上述代码中,我们需要包含mysql.h头文件来使用mysql提供的API对MySQL进行操作。程序写好了,编译过程需要加入需要的链接信息:

    gcc -I/usr/include/mysql demo.c -L/usr/lib/mysql -lmysqlclient -o demo

    好了,程序成功编译,运行一下试试吧:

    ./demo
    
    #结果如下
    Connection success
    Inserted 1 rows

    感谢阅读,希望能帮到大家(Published by Windows Live Writer)。

  • 相关阅读:
    hdu 3790 最短路径问题
    hdu 2112 HDU Today
    最短路问题 以hdu1874为例
    hdu 1690 Bus System Floyd
    hdu 2066 一个人的旅行
    hdu 2680 Choose the best route
    hdu 1596 find the safest road
    hdu 1869 六度分离
    hdu 3339 In Action
    序列化和反序列化
  • 原文地址:https://www.cnblogs.com/berlin-sun/p/mysqlinlinux.html
Copyright © 2011-2022 走看看