MySQL中的用户,都存储在系统数据库mysql的user表中
use mysql;
select host,user,authentication_string from user;
create user '用户名'@'登陆主机/ip' identified by '密码';
drop user '用户名'@'主机名'
set password=password('新的密码'); //自己改自己密码
set password for '用户名'@'主机名'=password('新的密码') //root用户修改指定用户的密码
刚创建的用户没有任何权限,需要给用户授权。
grant 权限列表 on 库.对象名 to '用户名'@'登陆位置' [identified by '密码']
MySQL数据库提供的权限列表:
all [privileges]
表示赋予该用户在该对象上的所有权限flush privileges;
revoke 权限列表 on 库.对象名 from '用户名'@'登陆位置';
使用C语言连接mysql,需要使用mysql官网提供的库,在官网上下载合适自己平台的mysql connect库
#include
mysql_get_client_info()
函数,来验证引入是否成功初始化mysql_init()
MYSQL* mysql_init(MYSQL* mysql);
链接数据库
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);
设置链接的默认字符集是utf8,原始默认是latin1
mysql_set_character_set(myfd, "utf8");
下发mysql命令
int mysql_query(MYSQL *mysql, const char *q);
读取结果
MYSQL_RES *mysql_store_result(MYSQL *mysql);
获取结果行数
longlong mysql_num_rows(MYSQL_RES *res);
获取结果列数
unsigned int mysql_num_fields(MYSQL_RES *res);
获取列名
MYSQL_FIELD* mysql_fetch_fields(MYSQL_RES *res);
获取结果内容
MYSQL_ROW mysql_fetch_row(MYSQL_RES* result); //按照行读取文件内容,自动更新行数
关闭mysql链接
void mysql_close(MYSQL *sock);
案例
// 该函数用来连接 mysqld 并执行mysql语句
// 将执行sql语句后的Question内容传到第二个参数vector中
bool QueryMySql(const std::string &sql, vector<Question> *out)
{
// 创建mysql句柄
MYSQL *my = mysql_init(nullptr);
// 连接数据库
if(nullptr == mysql_real_connect(my, host.c_str(), user.c_str(), passwd.c_str(),db.c_str(),port, nullptr, 0))
{
return false;
}
// 设置该链接的编码格式, 要不然会出现乱码问题
mysql_set_character_set(my, "utf8");
// 执行sql语句
if(mysql_query(my, sql.c_str())!= 0)
{
return false;
}
// 提取结果
MYSQL_RES *res = mysql_store_result(my);
// 分析结果
int rows = mysql_num_rows(res); //获得行数量
int cols = mysql_num_fields(res); //获得列数量
Question q;
//定义Question临时结构体,保存问题信息,插入到vector中
//导入问题的信息到q中
for(int i = 0; i < rows; i++)
{
MYSQL_ROW row = mysql_fetch_row(res);
q.id = row[0];
q.title = row[1];
q.star = row[2];
q.desc = row[3];
q.header = row[4];
q.tail = row[5];
q.cpu_limit = atoi(row[6]);
q.mem_limit = atoi(row[7]);
out->push_back(q);
}
// 关闭mysql连接
mysql_close(my);
return true;
}