Linux下数据库的安装配置、数据库C程序连接

2,185 阅读3分钟

一、数据库的安装和配置

1. 数据库的安装

在这里插入图片描述

2. 配置

(1)先查看数据库状态(service mysql status),如果没有启动,执行启动命令(service mysql start)

(2)mysql -uroot -p在root状态执行,进入数据库(什么也不用输入,再敲回车就可以直接进入mysql)

在这里插入图片描述

(3)mysql_secure_installation设置数据库不进行密码强校验(N)

(4)设置root管理员密码,是数据库管理员的。是两遍。

(5)设置是否要删除匿名用户,这里不删除。(N)

(6)设置是否允许root用户远程登录,这里设置允许。(Y)

(7)是否删除数据库,这里选择不删除。(N)

(8)设置修改的权限立即生效,此时所有配置初始化完成。(Y)

3. 常用命令

service mysql status查看数据库状态

service mysql start启动数据库

service mysql restart重启数据库

service mysql stop数据库停止

quitexitctrl+d退出数据库

连接数据库:mysql -u用户名 -h主机地址(省略代表本机) -p密码

显示数据库版本

在这里插入图片描述

显示时间

在这里插入图片描述

4. 用户管理与授权

  • 查看用户信息

在这里插入图片描述

  • 创建用户

在这里插入图片描述

  • 创建用户指定加密方式

image.png image.png

  • 更新用户密码,指定加密方式,注意密码强度大小写数字

在这里插入图片描述

  • 授权/取消用户对那些数据库的那些表可以进行操作示例: 指定user_name用户可以从任意地点登录访问所有数据库的所有表
GRANT ALL PRIVILEGES ON *.* TO 'user_name'@'%' identified by '密码' 
GRANT ALL ON database_name.table_name TO 'user_name'@'localhost'
REMOVE SELECT ON database_name.table_name from 'user_name'@'localhost'(取消查询权限)
  • 删除用户

在这里插入图片描述

二、数据库C程序连接

1. 安装C/C++开发库

切换到root下,执行apt install libmysqlclient-dev

image.png

2. C语言访问mysql

  • 连接数据库使用的头文件和库文件
#include <mysql/mysql.h>

有些也在 #include <mysql.h>

程序中使用了访问mysql的有关函数接口,需要在链接时指定库名: linux平台为 -lmysqlclient

  • 初始化连接句柄
MYSQL *mysql_init(MYSQL *mysql);

该方法用来初始化一个连接句柄,如果参数为空,则返回一个指向新分配的连接句柄的指针。如果传递一个已有的结构,它将被重新初始化。出错时返回为NULL。

  • 连接数据库
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 long clientflag);
/*
port 是数据库的端口 3306,也可直接写0,意味着使用mysql默认端口,
unix_socket 一般为NULL,表示不使用unix套接字或者管道
clientflag 标志位,一般给0

返回值,失败为NULL,成功与第一个参数值相同。
*/
  • 关闭连接
void mysql_close(MYSQL *mysql);

3. 测试C语言连接数据库

#include <stdio.h>
#include <mysql/mysql.h> 
int main() 
{ 
	MYSQL connect;//mysql连接对象 
        mysql_init(&connect); //连接到mysql 
	if(mysql_real_connect(&connect,"localhost","root","123456","testdb",0,NULL,0)) 
	{ 
		printf("连接mysql成功\n");
	}
	else 
	{ 
		printf("err:%s\n",mysql_error(&connect));
		printf("连接mysql失败\n"); 
	}//关闭mysql连接 
	mysql_close(&connect); 
	return 0; 
}

image.png

4. 一个简单的示例

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<assert.h>
#include<mysql/mysql.h>

int main()
{
    MYSQL *mysql=mysql_init(NULL);
    if(mysql==NULL)
    {
        printf("mysql init err\n");
        exit(0);
    }
    mysql=mysql_real_connect(mysql,"127.0.0.1","root","123456","testdb",3306,NULL,0);
    if(mysql==NULL)
    {
        printf("connect failed\n");
        exit(0);
    }

    //char *sql="insert into stu values('小明',21)";
    //char *sql="update stu set age=30 where name='小王'";
    //char *sql="delete from stu where name='小王'";
    char *sql="select * from stu";
    int res=mysql_query(mysql,sql);//执行sql语句
    if(res!=0)
    {
        printf("query sql err:%s\n",mysql_error(mysql));//打印错误信息
    }
    MYSQL_RES *mysql_res=mysql_store_result(mysql);//获取结果集
    if(mysql_res==NULL)
    {
        printf("提取数据失败:%s\n",mysql_error(mysql));
        exit(0);
    }

    int num=mysql_num_rows(mysql_res);//获取结果集中有多少行
    if(num==0)
    {
        printf("没有记录\n");
    }
    else
    {
        printf("当前记录条数:%d\n",num);
        int m=mysql_field_count(mysql);//查看每行记录有几个字段(列)
        printf("一行记录有%d列\n",m);
        for(int i=0;i<num;i++)
        {
            MYSQL_ROW mysql_row=mysql_fetch_row(mysql_res);//取出结果集中的一条记录
            //printf("name=%s,age=%s\n",mysql_row[0],mysql_row[1]);
            for(int j=0;j<m;j++)
            {
                printf("row[%d]=%s ",j,mysql_row[j]);
            }
            printf("\n");
        }
    }
    mysql_free_result(mysql_res);//释放结果集占用内存
    mysql_close(mysql);
    exit(0);
}