Linux下mysql的安装和使用(C语言)

news/2025/2/23 22:12:37

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:
进入目录mysql\bin,再键入命令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("\n");
    }

    mysql_free_result(res);
    mysql_close(&mysql);
    return 0;
}

转载于:https://www.cnblogs.com/nearmeng/p/4043513.html


http://www.niftyadmin.cn/n/711680.html

相关文章

【HIHOCODER 1163】 博弈游戏·Nim游戏

描述 今天我们要认识一对新朋友&#xff0c;Alice与Bob。 Alice与Bob总是在进行各种各样的比试&#xff0c;今天他们在玩一个取石子的游戏。 在这个游戏中&#xff0c;Alice和Bob放置了N堆不同的石子&#xff0c;编号1..N&#xff0c;第i堆中有A[i]个石子。 每一次行动&#xf…

php怎么添加日历,PHP简单创建日历的方法

本文实例讲述了PHP简单创建日历的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;function build_calendar($month,$year) {// Create array containing abbreviations of days of week.$daysOfWeek array(S,M,T,W,T,F,S);// What is the first day of the month…

SpringBoot——SpringBoot中设置字符集编码的两种方式

1.方式一&#xff08;使用传统的Spring提供的字符集过滤器&#xff09; 先写一个Servlet。 package com.songzihao.springboot.servlet;import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import j…

win8.1弹框

在winform或者wp8中用MessageBox.Show()弹框,但是wp8.1中已经不存在了 private async void btn_Click(object sender, RoutedEventArgs e) { //首先在需要点击的button按钮Click事件中创建MessageDialog对象 MessageDialog msnew MessageDialog("点击按…

Java设计模式(八)----代理模式

代理模式 1.生活中&#xff1a; 代理就是一个人或者一个组织代表其它人去做一件事的现实生活中的。在一些情况下&#xff0c;一个客户不想或者不能够直接引用一个对象&#xff0c;而代理对象能够在client和目标对象之间起到中介的作用。2.官方&#xff1a; 代理模式是对象的…

Android练习——Spinner二级联动_城市选择

样式部分xml 1 <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"2 xmlns:tools"http://schemas.android.com/tools"3 android:layout_width"match_parent"4 android:layout_height"match_parent…

01_MUI之Boilerplate中:HTML5演示样例,动态组件,自己定义字体演示样例,自己定义字体演示样例,图标字体演示样例...

&#xfeff;&#xfeff;1安装HBuilder5.0.0,安装后的界面截图例如以下&#xff1a;2 依照https://www.muicss.com/docs/v1/css-js/boilerplate-html中的说明&#xff0c;创建上图的Boilerplate.html&#xff1a;3 代码内容例如以下&#xff1a;<!--作者&#xff1a;XXXqq.…

matlab功能块的作用,为什么功能块、功能要被拖入组织块才有效?

回答者&#xff1a;henry.wang - 高级工程师&nbsp&nbsp第11级 2018-12-21 21:40:09需要调用才能起作用啊回答者&#xff1a;紫方 - 资深顾问&nbsp&nbsp第13级 2018-12-21 22:58:06从表象上看似乎不一定&#xff0c;功能块也可以调用功能块及功能&#xff0c;但…