MySQL用户管理及c语言链接

1.MySQL用户管理

1.1用户信息

MySQL中的用户的信息都存储在系统数据库mysql的user表中。表中host字段表示这个用户可以从哪个主机登录,如果是localhost,表示只能从本地登录。user字段是用户名。authentication_string字段是用户加密后的密码。

1.2用户的增删查改

查询用户使用select语句查询MySQL系统自带的mysql数据库的user表即可。

创建用户使用:create user '用户名'@'登录主机/ip' identified by '密码'; 即可。MySQL中涉及password的语句都不会存储在历史命令中。

删除用户使用:drop user '用户名'@'主机名'; 即可。修改用户密码使用:set password=password('新密码'); 即可。

1.3数据库的权限

数据库的权限大致如下。

权限 上下文
CREATE Create_priv 数据库、表或索引
DROP Drop_priv 数据库或表
GRANT OPTION Grant_priv 数据库、表或保存的程序
REFERENCES References_priv 数据库或表
ALTER Alter_priv
DELETE Delete_priv
INDEX Index_priv
INSERT Insert_priv
SELECT Select_priv
UPDATE Update_priv
CREATE VIEW Create_view_priv 视图
SHOW VIEW Show_view_priv 视图
ALTER ROUTINE Alter_routine_priv 保存的程序
CREATE ROUTINE Create_routine_priv 保存的程序
EXECUTE Execute_priv 保存的程序
FILE File_priv 服务器主机上的文件访问
CREATE TEMPORARY TABLES Create_tmp_table_priv 服务器管理
LOCK TABLES Lock_tables_priv 服务器管理
CREATE USER Create_user_priv 服务器管理
PROCESS Process_priv 服务器管理
RELOAD Reload_priv 服务器管理
REPLICATION CLIENT Repl_client_priv 服务器管理
REPLICATION SLAVE Repl_slave_priv 服务器管理
SHOW DATABASES Show_db_priv 服务器管理
SHUTDOWN Shutdown_priv 服务器管理
SUPER Super_priv 服务器管理

1.4用户的权限

在默认情况下root拥有所有数据库的所有权限。但是新创建的普通用户在默认情况下只能查看个别系统自带的数据库,普通用户想要获取权限只能找root用户来给他赋权:grant 权限列表 on 库.对象名 to '用户名'@'登录位置'; 。权限列表的多个权限用逗号隔开,也可以使用all来代指所有权限。 root也可以回收普通用户的权限:revoke 权限列表 on 库.对象名 from '用户名'@'登录位置';

2.mysql connect

c语言链接mysql的过程大致分为以下步骤:1.创建MSQL对象。2.链接mysql服务。3.执行sql语句。4.如果是selec查询语句就需要创建MYSQL_RES结果集对象。5.获取结果集的数量。6.循环打印结果集。7.释放结果集对象。8.关闭mysql链接。如果是其他的sql语句就不需要4567步。

步骤 操作 关键函数 说明
1 创建 MYSQL 对象 mysql_init() 分配和初始化 MYSQL 对象
2 连接 MySQL 服务 mysql_real_connect() 连接服务器,传入主机、用户、密码、数据库名等参数
3 执行 SQL 语句 mysql_query()mysql_real_query() 执行任意 SQL(增删改查)
4 判断是否为 SELECT mysql_field_count() 检查受影响的行数或返回结果集
5 创建结果集对象 mysql_store_result()mysql_use_result() 仅对返回结果的查询(如 SELECT)
6 获取结果集数量 mysql_num_rows()/ mysql_num_fields/ mysql_fetch_fields 返回结果集中的行数,列数,行名
7 循环打印/处理结果集 mysql_fetch_row() 逐行获取数据,直到返回 NULL
8 释放结果集 mysql_free_result() 释放 MYSQL_RES 对象
9 关闭连接 mysql_close() 关闭 MYSQL 连接句柄
复制代码
MYSQL *conn;
MYSQL_RES *res;
MYSQL_ROW row;

// 1. 创建 MYSQL 对象
conn = mysql_init(NULL);

// 2. 连接 MySQL
if (!mysql_real_connect(conn, "localhost", "user", "pass", "db", 0, NULL, 0)) {
    // 连接失败处理
}

// 3. 执行 SQL
if (mysql_query(conn, "SELECT * FROM table")) {
    // 执行失败处理
}

// 4. 判断是否是 SELECT 类查询
res = mysql_store_result(conn);
if (res) {
    // 5. 获取行数(可选)
    int num_rows = mysql_num_rows(res);
    
    // 6. 循环打印结果集
    while ((row = mysql_fetch_row(res))) {
        // 处理每一行数据
        printf("%s\n", row[0]);
    }
    
    // 7. 释放结果集
    mysql_free_result(res);
} else {
    // 非 SELECT 查询(INSERT/UPDATE/DELETE 等)
    printf("影响行数: %lu\n", mysql_affected_rows(conn));
}

// 8. 关闭连接
mysql_close(conn);
相关推荐
我是一颗柠檬14 小时前
【MySQL全面教学】MySQL存储过程与函数Day11(2026年)
数据库·后端·mysql
程序猿乐锅14 小时前
【MySQL | 第三篇】MySQL存储引擎详解
数据库·mysql
tang74516396214 小时前
MariaDB的mysql安装
数据库·mysql·mariadb
cyw899814 小时前
m3e向量化mysql某表
android·数据库·mysql
我是一颗柠檬14 小时前
【MySQL全面教学】MySQL视图与触发器Day12(2026年)
数据库·后端·mysql
Irene199115 小时前
SQL示例(使用差分数组 + 窗口函数)统计并发数量问题(处理边界:当开始时间和结束时间相同时,应该先+1再-1,才能正确统计峰值)
mysql
牧羊狼的狼15 小时前
MySQL 提升SQL查询性能的全套实战优化方法
数据库·sql·mysql
handler011 天前
【MySQL】常用命令总结(库与表增删查改)
运维·数据库·mysql·命令·总结
week@eight1 天前
Linux - Doris
linux·运维·数据库·mysql