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);
相关推荐
云技纵横10 小时前
唯一索引 INSERT 死锁实战:5 秒复现交叉插入的 S 锁循环等待
sql·mysql
沉默王二10 小时前
面试官:RAG 不用向量数据库,用 MySQL 硬扛?我:100 万向量不是很轻松?
mysql·面试·ai编程
小猿姐1 天前
MySQL Top 10 热点问题 AI 运维实战:从内核诊断到云原生运维
mysql·云原生·aiops
云技纵横1 天前
Gap Lock 死锁实战:5 秒在本地复现 MySQL 间隙锁死锁
后端·mysql
无响应de神1 天前
三、用户与权限管理
数据库·mysql
摇滚侠2 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
ApacheSeaTunnel2 天前
实战演示 | 基于 Apache SeaTunnel 与 Apache DolphinScheduler 实现 MySQL 到 Doris 离线定时增量同步
大数据·mysql·开源·doris·数据集成·seatunnel·数据同步
DARLING Zero two♡2 天前
【MySQL数据库】数据类型与表约束
数据库·mysql
活宝小娜2 天前
mysql详细安装教程
数据库·mysql·adb