一、数据库的安装和配置
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
数据库停止
quit
或exit
或ctrl+d
退出数据库
连接数据库:mysql -u用户名 -h主机地址(省略代表本机) -p密码
显示数据库版本
显示时间
4. 用户管理与授权
- 查看用户信息
- 创建用户
- 创建用户指定加密方式
- 更新用户密码,指定加密方式,注意密码强度大小写数字
- 授权/取消用户对那些数据库的那些表可以进行操作示例: 指定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
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;
}
复制代码
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);
}
作者:_小菜鸟
链接:https://juejin.cn/post/7052310213776539685