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);
相关推荐
Decay__19 小时前
12_MySQL InnoDB 内存与锁调优 —— Buffer Pool、redo log、隔离级别与锁等待
运维·数据库·sql·mysql·架构
苏宸啊1 天前
MySQL(一)
数据库·mysql
2603_969694851 天前
JDBC 基础学习笔记:API 核心原理解析与 CRUD 代码实操
数据库·笔记·mysql·学习方法·database·sql注入
这个DBA有点耶1 天前
库内语义构建 vs 外挂向量库:业务语义缺失,才是RAG“胡说八道”的根源
数据库·mysql·aigc
kobe_OKOK_1 天前
mysql 开启 binlog 日志
数据库·mysql
这个DBA有点耶1 天前
MySQL 8.0直方图:统计信息升级了,执行计划为什么还是选错?
数据库·mysql·代码规范
aiks_yuan1 天前
MySQL 深分页 LIMIT 越翻越慢怎么办:300 万行实测 OFFSET、延迟关联和 keyset 的耗时差距(MySQL 8.2)
mysql
Decay__1 天前
14_MySQL 高可用与容灾架构 —— MGR / InnoDB Cluster / Keepalived+VIP / 双主 / 读写分离 / 两地三中心
运维·数据库·sql·mysql·架构
Thanks_ks1 天前
MySQL 的索引是什么?用图书馆的目录讲明白
数据库·sql·mysql·索引·联合索引·explain·慢查询优化
.痞老板.2 天前
mysql初阶--增删改查操作
数据库·mysql