zoukankan      html  css  js  c++  java
  • Linux下mysql的安装和使用(C语言)

    1 mysql的安装

    我使用的ubuntu在线安装,非常简单,命令为:

    sudo apt-get install mysql-client mysql-server
    

    2 mysql命令集合

    网络太多了,我就copy一段吧。

    1.linux下启动mysql的命令:

    mysqladmin start
    /ect/init.d/mysql start (前面为mysql的安装路径)
    

    2.linux下重启mysql的命令:

    mysqladmin restart
    /ect/init.d/mysql restart (前面为mysql的安装路径)
    

    3.linux下关闭mysql的命令:

    mysqladmin shutdown
    /ect/init.d/mysql shutdown (前面为mysql的安装路径)
    

    4.连接本机上的mysql:
    进入目录mysqlin,再键入命令mysql -uroot -p, 回车后提示输入密码。
    退出mysql命令:exit(回车)

    5.修改mysql密码:
    mysqladmin -u用户名 -p旧密码 password 新密码
    或进入mysql命令行SET PASSWORD FOR root=PASSWORD("root");

    6.增加新用户。(注意:mysql环境中的命令后面都带一个分号作为命令结束符)
    grant select on 数据库.* to 用户名@登录主机 identified by "密码"
    如增加一个用户test密码为123,让他可以在任何主机上登录, 并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入mysql,然后键入以下命令:

    grant select,insert,update,delete on *.* to " Identified by "123";
    

    7、显示数据库列表。

    show databases;
    

    8、显示库中的数据表:

    use mysql; //打开库
    show tables;
    

    9、显示数据表的结构:

    describe 表名;
    

    10、建库:

    create database 库名;
    

    11、建表:

    create table 表名(字段设定列表);
    

    12、删库和删表:

    drop database 库名;
    drop table 表名;
    

    13、将表中记录清空:

    delete from 表名;
    truncate table  表名;
    

    14、显示表中的记录:

    select * from 表名;
    

    15、编码的修改

    如果要改变整个mysql的编码格式:
    启动mysql的时候,mysqld_safe命令行加入

    --default-character-set=gbk 
    

    如果要改变某个库的编码格式:在mysql提示符后输入命令

    alter database db_name default character set gbk;
    

    16、重命名表

    alter table t1 rename t2;
    

    17.查看sql语句的效率

    explain < table_name >
    

    例如:explain select * from t3 where id=3952602;

    18.用文本方式将数据装入数据库表中(例如D:/mysql.txt)

    mysql> LOAD DATA LOCAL INFILE "D:/mysql.txt" INTO TABLE MYTABLE;
    

    还不能满足你的话,来这里看API吧。

    2 C语言的API函数

    mysql对于C语言的API,使用较为频繁的有:
    mysql_init,mysql_real_connect,mysql_query,mysql_store_result,mysql_fetch_row,mysql_free_result,mysql_close,mysql_init

    具体的使用方法如下。

    (1)mysql_init

    作用:是初始化MYSQL变量,为mysql_real_connect()做准备。

    用法:

    MYSQL *mysql_init(MYSQL *mysql)
    

    返回值:MYSQL句柄或描述符;内存不足是为NULL;

    (2)mysql_real_connect

    功能:链接mysql数据库;

    用法:

    MYSQL *mysql_real_connect(MYSQL *mysql,
    
    const char *host, const char*user, 
    
    const char *passwd, const char*db, 
    
    unsigned int port, const char*unix_socket, 
    
    unsigned int client_flag)
    

    说明:如果port!=0,则将作为TCP/IP端口使用,默认为0;如果unix_socket!=NULL,则可指定socket或命名PIPE,默认为NULL;Client_flag可以指定特定的值(略),默认为0.

    (3)mysql_query

    功能:查询实施

    用法:

    int mysql_query(MYSQL *mysql, const char *query)
    

    说明:query为数据库操作命令字符串,本义是查询(select),可包括select,update,insert,delete等对数据库操作的命令。mysql_query不能用来处理二进制数据,处理二进制数据可使用mysql_real_query。

    返回值:0表示正常,非0表示发生了错误。

    (4)mysql_store_resul

    功能:结果集处理。如果使用mysql_query运行的是一个SELECT语句,或其它可以返回结果的查询,可用函数mysql_store_result来访问返回结果并并将其保存在一个变量中,以便做进一步处理。

    用法:

    MYSQL_RES *mysql_store_result(MYSQL *mysql)
    
    MYSQL_RES *mysql_use_result(MYSQL *mysql)
    

    说明:mysql为mysql_real_connect函数的返回值。

    (5)结果集的使用

    使用了mysql_store_result函数保存结果后,可以使用以下函数对结果集进行处理。

    ①获得结果集中的行数:

    my_ulonglong mysql_num_rows(MYSQL_RES *result)
    

    ②获得结果集行的域字段数:

    unsigned int mysql_num_fields(MYSQL_RES *result)
    
    unsigned int mysql_num_fields(MYSQL *mysql)
    

    ③读取结果集中的一行:

    MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)
    

    ④获取结果集中行的域段数:

    unsigned int mysql_field_count(MYSQL *mysql)
    

    ⑤获得结果集中的域的属性:

    MYSQL_FIELD *mysql_fetch_field(MYSQL_RES *result)
    

    ⑥获得域属性数组:

    MYSQL_FIELD *mysql_fetch_fields(MYSQL_RES *result)
    

    ⑦查询被update、delete、insert等受影响的行:

    my_ulonglong mysql_affected_rows(MYSQL *mysql)
    

    (6)善后工作

    当对数据库使用完毕后,应对所创建的变量等进行释放:

    mysql_free_result(result);
    mysql_close(&mysql);
    

    (7)错误处理

    方法有2:利用函数的返回值来判断函数执行是否正确;2.使用mysql提供的错误号和错误信息:

    错误号:

    unsigned int mysql_errno(MYSQL *mysql)
    

    错误信息:

    char *mysql_error(MYSQL *mysql)
    

    (8)辅助函数

    获取客户机版本信息:

    char *mysql_get_client_info(void)
    

    获取主机信息:

    char *mysql_get_host_info(MYSQL *mysql)
    

    获取协议版本信息:

    unsigned int mysql_get_proto_info(MYSQL *mysql)
    

    获取服务器版本信息:

    char *mysql_get_server_info(MYSQL *mysql)
    

    获取可用数据库列表:

    MYSQL_RES *mysql_list_dbs(MYSQL *mysql, const char *wild)
    

    获取数据库的可有表列表:

    MYSQL_RES *mysql_list_tables(MYSQL *mysql, const char *wild)
    

    3 C语言操作mysql的实例

    假设数据库中已经创建了一个test库,库中有一个children表,表中有点小数据。现在将这些数据读取出来。

    #include "stdio.h"
    #include "string.h"
    #include "mysql/mysql.h"
    
    int main()
    {
    	MYSQL mysql;
    	MYSQL_RES *res;
    	MYSQL_ROW row;
    	int i,j;
    
    	char *query = "select * from children;";
    
    	mysql_init(&mysql);
    
    	if(!mysql_real_connect(&mysql,"localhost","root","open","test",0,NULL,0))
    	{
        	printf("Error in connecting");
    	}
    
    	if(mysql_query(&mysql,query))
    	{
        	printf("Error in querying");
    	}
    
    	res = mysql_store_result(&mysql);
    
    	while(row = mysql_fetch_row(res))
    	{
        	for(i=0;i<mysql_num_fields(res);i++)
        	{
            	fprintf(stdout,"%s ",row[i]);
        	}
        	printf("
    ");
    	}
    
    	mysql_free_result(res);
    	mysql_close(&mysql);
        return 0;
    }
  • 相关阅读:
    会话执行存储过程,等待被阻塞,Kill session场景模拟
    会话断开数据保存情况
    Linux关闭透明大页配置
    ORA16019搭建DG设置归档线程参数报错
    如何将openssl、uuid和crypto的库文件放到本地指定库目录
    cscope中这样生成cscope.files
    使用kdesvn完成tags和branch功能
    ubuntu中设定ibus自启动
    使用kdesvn提交文件出现Aborting commit:'.lcd1602.ko.cmd' remains in conflict错误提示
    error: dereferencing pointer to incomplete type的解决办法
  • 原文地址:https://www.cnblogs.com/nearmeng/p/4043513.html
Copyright © 2011-2022 走看看